iOS项目更新之升级Xcode7 & iOS9
前言
Apple 的WWDC所发布内容在给大家带来惊喜之际,给各位iOS开发的同仁却也带来了不同程度的麻烦。首先不讲新功能,就单指原来老版本的项目升级、代码升级,就是一堆问题,而且是不得不面临的问题。下面就跟着笔者一起来回顾下,此次在项目升级过程中,所遇到的各个问题点,以及解决方案,与各位已经做过和正在做iOS代码升级的同仁共勉,也给各位将要做Xcode 7和iOS9兼容的同仁以参考。
开发环境安装
原本运行得好好的项目,要升级Xcode7,首先就得安装Xcode7,具体的可以从开发者官网下载(目前最新版本是Xcode_7_GM_seed).下载好后,就双击下载好的dmg包,当然,前提还是需要我们的Mac环境升级到Mac OS 10.10.4+(图1.1),就可以打开Xcode安装镜像,如图1.2:

图1.1 Mac OS 更新示意图

图1.2 Xcode 7 GM安装
接下来,我们只要将图1.1所示的Xcode拖动到指定文件夹,即可完成安装,接下来,我们只要双击运行即可。
开发环境运行
各位可能会觉得,笔者在此还要讲开发环境的运行,是不是多此一举。其实并非如此,综合笔者这几年iOS开发经验的总结,运行新版本,特别是测试版本的Xcode是一个需要格外小心的事情,讲起来都是血泪史。
在运行 GM 版本Xcode时,我们需要特别注意以下几个方面:
- 在运行GM版本Xcode前,务必要退出原来正式版本Xcode(如Xcode 6.4)
- 在运行GM版本Xcode时,务必要避免双击打开工程文件(也是为了避免新旧版本同时运行)。
- 如果要切换回原来版本时,一定要先退出GM版本,而且尽可能将Xcode的缓存数据清除。
当然,可能在实际的过程中,还是会有不少朋友就这么干了,当然,如果我们App后续只需要使用新版本Xcode,自然是没有太大关系,只是对于还需要用旧版本来开发或者发布App的朋友,可能就会有点麻烦,可能在用旧版本编译App在运行的时候,就会出现各种诡异的现象(如打印信息明明是正常,App运行逻辑却不正常等)。这时,可能大家要考虑的就是把Xcode删除掉,重新来过,甚至是重装操作系统。当然,不知道是否有朋友有更好的方案。不过笔者是不再想经历这种事情了。
App 项目运行
待项目运行,首先会碰到的问题就是配置兼容,会出现如下错误

图2.1 BitCode 错误
当我们看到App编译报错的时候,首先想项目不兼容Xcode7,再仔细一看
ld: ‘/Volumes/MacintoshHD/…/AnimationDesk Universal/Sources/AnimaitonDesk Universal/Classes/Supporting Files/GoogleLibrary/libGoogleAnalyticsServices.a(TAGDataProvider.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
其中 ENABLE_BITCODE 吸引了我们的注意,看结合其它的描述信息,基本可以确定是我们使用的第三方静态库(.a)不支持BitCode,当然,我们对应就有如下两种方案来解决:
方法一:更新对应的第三方静态库(现在更新的静态库,基本都能支持BitCode)
方法二:可以将Xcode7默认开启的BitCode功能关闭,如图2.2所示

图2.2 关闭BitCode 操作示意图
当然,除了上面的问题外,当我们在添加Framework的时候,会发现此前导入的动态链接库(dylib)他部变成了红色,如图2.3所示,所幸的是,就算不替换成Xcode 7新的动态库文件(.tbd),仍然可以正常运行.
图2.3 动态链接库丢失示意图
最后,部分App在编译的时候,可能还会收到如下报错,小编也遇到过一次
All interface orientations must be supported unless the app requires full screen.
看到这句提示,就是说App默认是有开启了多任务功能,而多任务功能是需要App支持所有方向,如果我们App是有需要支持多任务,则需要开启App对各个方向(上、下、左、右)的支持;如果App不需要开启多任务,则只需要将如下示意图的 requires full screen 勾选上就ok(如图2.4)。

图2.4 勾选 Requires full screen示意图
不出意外,接下来,App应该是能正常编译运行(小编的AnimationDesk Cloud接下来是可以正常运行),但紧接着,发生了更诡异的事情,以前的的网络访问,现在完全访问不通;大家也许会觉得这可能是服务器挂了,或是外网被墙了,小编最初也是这么想的,但事实上,服务器(从Safari)还是能照常被访问,只是App访问不了,于是后来联想到iOS9 WWDC讲到的网络数据传输安全部分,经过一翻折腾,最终,网络访问的部分也恢复了正常。
其实只要在App的Info.plist里面加入如下信息就可以
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
添加成功后的示意图如下图(图2.4)
图2.4 添加Transport Security 示意图
其它事项
可能还有部分朋友跟小编一样,有碰到另外一个现象,就是UITextView,无论怎么设置它的textColor显示的总会是黑色,小编已找到具体的原理,准确地讲,应该是Xcode的一个Bug。
当小编在App开发时,在Xib上面设置过UITextView的背景色(BackgroundColor)为非默认颜色(WhiteColor)时,UITextView的文字颜色(textColor)无论怎么设置,都将会是黑色,如果想要颜色值正常,可以在设置好文本后,再重设一次颜色即可正常。
iOS项目更新之升级Xcode7 & iOS9的更多相关文章
- App项目升级Xcode7&iOS9(续) - This bundle is invalid. The bundle identifier contains disallowed characters
金田 iOS 9发布已经有2月有余,现在Xcode已经有升级到Xcode7.1,开发环境安装等一系列相关的流程,以及Xcode 7 & iOS 9升级相关的一些部分,在这里就不再多加赘述(详见 ...
- 升级Xcode7&iOS9后,出现NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -980X)
在info.plist里面添加如下内容即可: <key>NSAppTransportSecurity</key> <dict> <key>NSAllow ...
- 升级到iOS9之后的相关适配
iOS9AdaptationTips(iOS9开发学习交流群:458884057) iOS9适配系列教程[中文在页面下方]转自@iOS程序犭袁 (截至2015年9月26日共有10篇,后续还将持续更新. ...
- ios项目里扒出来的json文件
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...
- iOS项目开发知识点
前言部分 注:本文并非绝对原创 大部分内容摘自 http://blog.csdn.net/hengshujiyi/article/details/20943045 文中有些方法可能已过时并不适用于现在 ...
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
- ios项目中引用其他项目复习
ios项目中引用其他开源项目,今天再次复习了,记个备注. 1. 将开源项目的.xcodeproj拖入项目frameworks 2. Build Phases下 Links Binary With Li ...
- IOS 项目问题总结
把自己项目中遇到的问题总结一下,供大家参考,希望大家多多提出意见!! 在Xcode 6.2中遇到Your build settings specify a provisioning profile w ...
- 开源 iOS 项目分类索引大全
GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Category类型的库,附带很多自定义 ...
随机推荐
- Linux下查看所有用户(shell脚本获取)
在Linux系统中,使用者账号管理最重要的两个文件是/etc/password和/etc/shadow.在/etc/password文件中,每一行都代表一个账号,但是有很多账号是系统账号.比如:b ...
- js通用对象数组冒牌排序
数组对象通用 function sort(data, sortFiled, orderby) { var result = data, temp; for (var i = 0; i < res ...
- 配置ISCSI服务器
一.在linux下安装启动iscsi target 1.安装启动iscsi服务 [root@wjb10000 ~]# yum -y install targetcli.noarch 2.建立一个目录设 ...
- windows下配置两个或多个Tomcat启动的方法
确保window的环境变量中找不到CATALINA_HOME和CATALINA_BASE 修改server.xml,用解压版的tomcat,不要用安装版的. 1.修改http访问端口 conf下的se ...
- Android Studio 简介
Android Studio是Google于2013 I/O大会针对Android开发推出的新的开发工具,目前很多开源项目都已经在采用,Google的更新速度也很快,明显能感觉到这是Android开发 ...
- 06-自定义Attribute标记案例
自定义Attribute: 1)Attribute都从System. Attribute类继承,类名一般以Attribute结尾 2) 标记类的用途—AttributeUsage标记(标记的标记):A ...
- mockServer学习
mockServer学习 很喜欢mockserver官方主页的背景颜色和格式 官方主页如下: http://www.mock-server.com/
- mongodb的tailCursor的设计思想
http://derickrethans.nl/mongodb-and-solr.html 这是mongodb的php客户端的写法
- 【推荐】Java工程师如何从普通成为大神值得一读
本文源自 http://www.hollischuang.com/archives/489 一点感悟 java作为一门编程语言,在各类编程语言中作为弄潮儿始终排在前三的位置,这充分肯定了java语言的 ...
- js中运算符的优先级
不确定下面表达式的运算顺序? a>b?c:d+e a&&b==c 看看下表就清楚了,下表按优先级从最高到最低的列出,具有相同优先级按从左至右的顺序求值. 运算符 描述 . [] ...