適配iOS9

轉載自:http://blog.sina.com.cn/s/blog_adb19b690102vvlm.html

一、iOS9 bitcode

首先最大的問題就是坑貨xcode7,xcode7默認是打開bitcode的,bitcode是蘋果爲了解決他自己以後的應用可以隨意更換硬件的處理做的準備也就是arm指令集和x64指令集的問題

那麼我們的工程如果你採用了別人封裝的第三方庫,那麼好了,會爆以下錯誤
ld: ‘/UsersFramework/SDKs/PolymerPay/Library/mobStat/lib**SDK.a(**ForSDK.o)’does not contain bitcode. You must rebuild it with bitcode enabled (Xcodesetting ENABLE_BITCODE), obtain an updated library from the vendor, or disablebitcode for this target. for architecture arm64

上述這段文字說明了我們的第三方庫不支持bitcode,如果你需要支持,就需要這個第三方庫也支持bitcode。蘋果目前給出的臨時解決方案就好比當初MRC和ARC時候的解決辦法,當初xcode5更新時候默認是工程創建是ARC的,你可以關閉ARC改爲MRC,經過了一段時間後,大家都開始使用了ARC,那麼bitcode也一樣,在xcode7時候默認是開啓的,我們需要關閉,那麼如何關閉


適配iOS9


我引用了一篇文章的gif圖來做演示
在targets裏面選擇BuildSetting中搜索bitcode,然後改爲no就ok了



二、iOS9 https問題
如果在Xcode 9之前使用的時http請求,那麼在XCode 9上編譯的App是不能聯網的,會提示如下錯誤:
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
修 改方法是要麼使服務器支持https訪問,要麼關閉https的使用。第一種方法對於個人開發者來說代價還是比較大的,因此推薦使用後面一種方法,具體的 做法是:在工程的Info.plist文件裏添加NSAppTransportSecurity字典類型的,添加一個元素:key爲 NSAllowsArbitraryLoads,值爲YES。
適配iOS9




三、iOS 9 使用URL scheme必須將其加入白名單


否則會提示類似如下錯誤:
canOpenURL: failed for URL: "mqqopensdkapiV2://qqapp" - error: "This app is not allowed to query for scheme mqqopensdkapiV2”
修正方法是,Info.plist文件中添加一個key爲LSApplicationQueriesSchemes的數組值,裏面包含需要添加白名單的string類型的scheme。特酷吧在項目中使用了qq,微信等分享登錄功能,需要添加的值爲:
mqqopensdkapiV2
mqqOpensdkSSoLogin
mqq
mqzoneopensdkapiV2
mqzoneopensdkapi19
mqzoneopensdkapi
mqzoneopensdk
mqzone
weixin
wechat

四、新浪微博的jsonkit在部分機型上面導致崩潰
適配iOS9

問題是
 程序會奔潰到jsonkit.m void keyObjectISA = ((void **)keys[idx]);這行代碼,因爲在os x10.10中,NSString採用了TaggedPointer這項技術,此類型不使用解應用isa來獲取其所屬類,而是通過接下來的三位來查找類表索引的類型,且對象指針最低位置爲1。
如何解決:解決方法由羣友sun提供參考地址如下
http://blog.csdn.net/woainiliuwei007/article/details/48549103
由於taggedpointer類型不能用isa了,就必須修改爲object_getClass(keyObject) ,而且在line:2601處也需要做修改

這裏附一個修改過的jsonkit,可以正常使用 
http://download.csdn.net/detail/woainiliuwei007/9123789

五、原來的dylib後綴名的庫全部修改爲libz.tbd
適配iOS9

六、報錯 Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/UIApplication.m:3294

在Info.plist中,可以找到:“Main storyboard file base name”  String “Main”,刪掉這個條目, 再啓動,屏幕變成了黑屏

手動添加window
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; //全屏window
    self.window.backgroundColor = [UIColor whiteColor]; //白色背景
    [self.window makeKeyAndVisible]; //
    return YES;
}
ok,這個由於更新xcode7報錯已解決!

如果按照上面修改完,發現還在報錯,那麼去看看你的項目是不是加了引導頁

把上面的add方法,變成下面的就好。

這個add方法在xcode7之前是沒有問題的,在xcode7後不能這樣寫了!


新增一種解決辦法,就是如果你以前的小工程運行在Xcode7上面,會直接崩潰原因在Xcode7上面是必須要windows有一個rootViewController的,所以我們需要給他添加一個

window.rootViewController = [UIViewController new];


七、在iOS9下,AddRessBook.framework被棄用了,改用Contacts.framework
適配iOS9


八、關於加入微信白名單會報錯的總結
適配iOS9
發佈了44 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章