Xcode 經常使用編譯選項設置

Xcode 經常使用編譯選項設置html

在xcconfig文件中指定便可。web

用標準庫鏈接數組

LINK_WITH_STANDARD_LIBRARIES = YES若是激活此設置,那麼編譯器在連接過程當中會自動使用經過標準庫的連接器。 
session

Info.plist 輸出編碼app

INFOPLIST_OUTPUT_FORMAT = binary指定Info.plist文件的輸出編碼(默認狀況下,輸出與輸入的編碼保持不變),這個輸出編碼能指定「binary」或者「XML」。 
生 成調試符號GCC_GENERATE_DEBUGGING_SYMBOLS = NO當啓用的時候,詳情等級可以經過build的’Level of Debug Symbols’設置去控制。 隱藏內聯方法GCC_INLINES_ARE_PRIVATE_EXTERN = YES Objective-C GCGCC_ENABLE_OBJC_GC = Unsupported 優化級別GCC_OPTIMIZATION_LEVEL = Fastest, Smallest   [-OS]iphone

  • None: 不作優化使用這個設置,編譯器的目標是減小編譯成本,使調試產生預期的結果。
  • Fast:優化編譯將爲大函數佔用更多的時間和內存使用這個設置,編譯器將嘗試減小代碼的大小和執行時間,不進行任何優化,須要大量編譯時間。
  • Faster:編譯器執行幾乎全部支持的優化,它不考慮空間和速度之間的平衡與「Fast」設置相比,該設置會增長編譯時間和生成代碼的性能。編譯器不進行循環展開、內聯函數和寄存器變量的重命名。
  • Fastest:開啓「Faster」支持的全部的優化,同時也開啓內聯函數和寄存器變量的重命名選項
  • Fastest,smallest:優化代碼大小這個設置啓用「Faster」全部的優化,通常不增長代碼大小,它還執行旨在減少代碼大小的進一步優化。

C 語言方言GCC_C_LANGUAGE_STANDARD = C89 警告 檢查Switch語句GCC_WARN_CHECK_SWITCH_STATEMENTS = YES 隱藏局部變量GCC_WARN_SHADOW = YES 隱式轉換成32位的類型GCC_WARN_64_TO_32_BIT_CONVERSION = YES 未完成的Objective-C協議GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES 抑制全部的警告GCC_WARN_INHIBIT_ALL_WARNINGS = NO 初始化時沒有完整的括號GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES例子(a沒有徹底的括號,b有): ide

  1. int a[ 2 ][ 2 ] = { 0, 1, 2, 3 };
  
  2. int b[ 2 ][ 2 ] = { { 0, 1 }, { 2, 3 } };  

不匹配的返回類型函數

GCC_WARN_ABOUT_RETURN_TYPE = YES 缺乏括號GCC_WARN_MISSING_PARENTHESES = YES例子:性能

  1. {  
  2.     if( a )  
  3.         if( b )  
  4.             foo();  
  5.         else  
  6.             bar();  
  7. }  
  1. {  
  2.     if( a )  
  3.     {  
  4.         if( b )  
  5.             foo();  
  6.         else  
  7.             bar();  
  8.     }  
  9. }  

在結構體初始化時缺乏字段
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES優化

 缺 少函數原型GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES 在文件結尾缺乏新行GCC_WARN_ABOUT_MISSING_NEWLINE = YES 選擇了多個定義的類型(@Selector)GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO 嚴格的Selector匹配GCC_WARN_STRICT_SELECTOR_MATCH = YES 把缺乏函數原型看成錯誤GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES 把全部的警告看成錯誤GCC_TREAT_WARNINGS_AS_ERRORS = YES 未定義的SelectorGCC_WARN_UNDECLARED_SELECTOR = YES 未初始化的自動變量GCC_WARN_UNINITIALIZED_AUTOS = YES 未知的Pragma指令GCC_WARN_UNKNOWN_PRAGMAS = YES 未使用的函數GCC_WARN_UNUSED_FUNCTION = YES 未使用的標籤GCC_WARN_UNUSED_LABEL = YES 未使用的參數GCC_WARN_UNUSED_PARAMETER = YES 未使用的值GCC_WARN_UNUSED_VALUE = YES當一個語句計算的結果顯式的未使用的時候發出警告 未使用的變量GCC_WARN_UNUSED_VARIABLE = YES 警告-全部過期的函數GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES offsetof宏未定義使用的警告GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YES

iphone 經常使用的<app>-info.plist設置

Application requires iPhone environment如 果應用程序不能在ipod touch上運行,設置此項爲true; 

Application uses Wi-Fi若是應用程序須要wi-fi才能工做,應該將此屬性設置爲true。這麼作會提示用戶,若是沒有打開wi-fi的話,打開wi-fi。爲了節省 電力,iphone會在30分鐘後自動關閉應用程序中的任何wi-fi。設置這一個屬性能夠防止這種狀況的發生,而且保持鏈接處於活動狀態 

Bundle display name這用於設置應用程序的名稱,它顯示在iphone屏幕的圖標下方。應用程序名稱限制在10-12個字符,若是超出,iphone將縮寫名 稱。 

Bundle identifier這個爲應用程序在iphone developer program portal web站點上設置的惟一標識符。(就是你安裝證書的時候,須要把這裏對應修改)。 

Bundle version這個會設置應用程序版本號,每次部署應用程序的一個新版本時,將會增長這個編號,在app store用的。

 Icon already includes gloss and bevel effects默認狀況下,應用程序被設置了玻璃效果,把這個設置爲true能夠阻止這麼作。 

Icon file(這個不用多說了)設置應用程序圖標的。 

Main nib file base name應用程序首次啓動時載入的xib文件 這個基本用不到。

 Initial interface orientation 肯定了應用程序以風景模式仍是任務模式啓動 

Localizations多語言。應用程序本地化的一列表,期間用逗號隔開,例如 應用程序支持英語 日語,將會適用 English,Japanese. Status bar is initially hidden 設置是否隱藏狀態欄。你懂的。

 Status bar style選擇三種不一樣格式種的一種。

 URL types應用程序支持的url標識符的一個數組。

用URL Scheme進行程序跳轉

打開info.plist,添加一項URL types
展開URL types,再展開Item1,將Item1下的URL identifier修改成URL Scheme
展開URL Scheme,將Item1的內容修改成myapp
其餘程序可經過myapp://訪問此自定義URL

參考:http://iphonedevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html

 

IOS後臺播放音樂

OS後臺播放只是在IOS4.0之後的版本支持。

1,設置後臺播放會話

AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];

[session setCategory:AVAudioSessionCategoryPlayback error:nil];

2,在info.plist裏面添加

<key>UIBackgroundModes</key>

<array>

<string>audio</string>

</array>

 

靜態庫無法包含category/分類?

若是你導入一個objc靜態庫,發現不少objc的category 不能調用,能夠嘗試在主工程中加入linker選項:

-all_load 加入這個通常就夠了

-ObjC

 

讓程序最小化再開啓時,從頭開始:

按下 「Home」 鍵之後程序可能並無退出而是轉入了後臺運行。若是您想讓應用直接退出,最簡單的方法是:在 info-plist 裏面找到 Application does not run in background 一項,勾選便可。

程序退出後任務欄仍是有圖標,可是程序原來的全部運行狀態所有丟失,點擊任務欄圖標也不過至關於再次啓動程序;若是容許後臺運行,點擊任務欄圖標後會恢復程序中斷時的界面。

 

本地化字符串:

在infoPlist.strings裏面寫

「string1″=」水果」

代碼裏面寫 myLabel.text = NSLocalizedString(@」string1″, nil);

 

本地化的Bundle display name:

1)建立一個空文件,取名爲InfoPlist.strings

2)對InfoPlist.strings進行本地化(Get Info  -> Make Localization),而後設置須要的語言(如中文zh)

3)編輯不一樣的InfoPlist.strings文件,設置顯示名字

CFBundleDisplayName = 「名字」; 

4)(這步不作貌似也能夠)編輯Info.plist,添加一個新的屬性Application has localized display name, 設置其類型爲boolean,並將其value設置爲選中狀態

 

default圖片的銜接問題:

程序開始後,手動加載default圖片,而後進行過渡效果便可。

遍歷目錄:

NSString *appDocDir = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] relativePath];NSArray *contentOfFolder = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:appDocDir error:NULL];for (NSString *aPath in contentOfFolder) { NSLog(@"apath: %@", aPath); NSString * fullPath = [appDocDir stringByAppendingPathComponent:aPath]; BOOL isDir; if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDir] && !isDir) { [fileList addObject:aPath]; }}

IB:

不論寫不寫property的retain,由IBOutlet都會爲對象加一個retainCount,因此只要鏈接了,就須要在viewDidUnload與dealloc中release並適當置爲nil。

預先在IB裏面加載好的文件(好比圖片),即便釋放了Controller,IB中的文件也不會被釋放,直至內存警告,解決辦法是較大的資源用代碼加載。

 

UIWebView:

用代碼加載UIWebView的內容,navigationType是UIWebViewNavigationTypeOther

 

CAAnimation:

必定要記得[self.view.layer removeAllAnimations];由於CAAnimation會retain它的delegate

設備型號識別,可經過審覈:

+ (NSString*)getDeviceVersion{ size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *machine = (char*)malloc(size); sysctlbyname("hw.machine", machine, &size, NULL, 0); NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]; free(machine); return platform;}

輸出:
//@」iPad1,1″ 
//@」iPad2,1″ 
//@」i386″

逗號後面數字解釋:(i386是指模擬器)
1-WiFi版
2-GSM/WCDMA 3G版
3-CDMA版

AppleTV(2G) (AppleTV2,1)
iPad (iPad1,1)
iPad2,1 (iPad2,1)Wifi版
iPad2,2 (iPad2,2)GSM3G版
iPad2,3 (iPad2,3)CDMA3G版
iPhone (iPhone1,1)
iPhone3G (iPhone1,2)
iPhone3GS (iPhone2,1)
iPhone4 (iPhone3,1)
iPhone4(vz) (iPhone3,3)iPhone4 CDMA版
iPhone4S (iPhone4,1)
iPodTouch(1G) (iPod1,1)
iPodTouch(2G) (iPod2,1)
iPodTouch(3G) (iPod3,1)
iPodTouch(4G) (iPod4,1)

判斷ipad/iphone

12UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPadUI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone

或者

1[[[UIDevice currentDevice] model] isEqualToString:@"iPad"];

判斷設備是否有攝像頭

1[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

相關文章
相關標籤/搜索