- Additional optional downloads:
- Older SDKs, eg, for building ancient projects.
- Older compilers (for same).
- Either ship gcc/llvm-gcc or don't. Don't ship clang and call it 'gcc', that just breaks anyone who actually needs GCC and finds your not-gcc in the PATH.
| #ifndef NS_DESIGNATED_INITIALIZER | |
| #if __has_attribute(objc_designated_initializer) | |
| #define NS_DESIGNATED_INITIALIZER __attribute((objc_designated_initializer)) | |
| #else | |
| #define NS_DESIGNATED_INITIALIZER | |
| #endif | |
| #endif |
Greetings, NSHipsters!
As we prepare to increment our NSDateComponents -year by 1, it's time once again for NSHipster end-of-the-year Reader Submissions! Last year, we got some mind-blowing tips and tricks. With the release of iOS 7 & Mavericks, and a year's worth of new developments in the Objective-C ecosystem, there should be a ton of new stuff to write up for this year.
Submit your favorite piece of Objective-C trivia, framework arcana, hidden Xcode feature, or anything else you think is cool, and you could have it featured in the year-end blowout article. Just comment on this gist below!
Here are a few examples of the kind of things I'd like to see:
- Using
NSStringFromSelector(@selector())as a safer way to do KVC / KVO / NSCoding. - Panic's [rather surprising discovery about the internals of the Lightning Digital AV Adapter](http://www.panic.com/blog/the-lightning-di
| #import <Foundation/Foundation.h> | |
| @interface NSBundle (TTTOverrideLanguage) | |
| + (void)ttt_overrideLanguage:(NSString *)language; | |
| + (void)ttt_resetLanguage; | |
| @end |
| // Just before switching jobs: | |
| // Add one of these. | |
| // Preferably into the same commit where you do a large merge. | |
| // | |
| // This started as a tweet with a joke of "C++ pro-tip: #define private public", | |
| // and then it quickly escalated into more and more evil suggestions. | |
| // I've tried to capture interesting suggestions here. | |
| // | |
| // Contributors: @r2d2rigo, @joeldevahl, @msinilo, @_Humus_, | |
| // @YuriyODonnell, @rygorous, @cmuratori, @mike_acton, @grumpygiant, |
| // Source: https://devforums.apple.com/message/866487#866487 | |
| typedef int (*PYStdWriter)(void *, const char *, int); | |
| static PYStdWriter _oldStdWrite; | |
| int __pyStderrWrite(void *inFD, const char *buffer, int size) | |
| { | |
| if ( strncmp(buffer, "AssertMacros: queueEntry", 24) == 0 ) { | |
| return 0; |
| // | |
| // AVAsset+VideoOrientation.h | |
| // | |
| // Created by Luca Bernardi on 19/09/12. | |
| // Copyright (c) 2012 Luca Bernardi. All rights reserved. | |
| // | |
| #import <AVFoundation/AVFoundation.h> | |
| typedef enum { | |
| LBVideoOrientationUp, //Device starts recording in Portrait |
CGRectDivide is handy for slicing up a rectangle.
Example of getting a slice and the remaining area of a rectange.
CGRect rect = CGRectMake(0, 0, 240, 150);
CGRect remainder, slice;
CGRectDivide(rect, &slice, &remainder, 120, CGRectMinYEdge);| How the get the 512x512 icon for an app. | |
| Look for this app on the itunes.apple.com website (Google is your friend) | |
| For example, this excellent app. | |
| http://itunes.apple.com/au/app/bancomap/id309009025?mt=8 | |
| Look for the URL of the icon in the page (it's a 175x175 picture). | |
| I use Safari, so right click on the icon and choose "Inspect Element" |
| - (void)drawTextInRect:(CGRect)rect | |
| { | |
| [super drawTextInRect:rect]; | |
| CGContextRef ctx = UIGraphicsGetCurrentContext(); | |
| NSString *fontName = self.font.fontName; | |
| CGFloat fontSize = self.font.pointSize; | |
| CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)fontName, fontSize, NULL); |