在用Xcode编译运行iOS应用和打包时,除了写好代码之外,开发环境中还有很多地方需要设置。对于初学者,面对各种设置有时还是挺忧伤的。在这里凭着一点记忆和一点笔记,对自己在学习过程中遇到的设置做一个总结,也希望能帮助到那些还在忧伤中的小伙伴们。当然疏漏在所难免,希望广大网友给予补充。我在今后如果遇到其他必要设置也会添加进来。
写本文时,最新的IOS系统是9.1版,Xcode是7.1版。
一,调试过程中需要设置的地方
1. 项目名字和应用显示名字
项目的名字其实在我们创建的时候就已经设置好。而且项目名字一般取英文名,并且习惯上作为包名的一部分。但是,如果希望应用在屏幕上显示中文名字,那就需要修改bundle display name了。找到TARGETS->Info->Custom iOS Target Properties->bundle display name,改之。
2. Bundle identifier,即包名
对于Cocos2d-x用户,这个也是在创建的时候就设置好了。当然也可以在创建后修改。找到TARGETS->General->Identity->Bundle Identifier,改之。
3. Device Orientation,横屏还是竖屏
找到TARGETS->General->Deployment Info->Device Orientation。选择之。
4. Deployment Target,即部署目标
这个是设置能运行该应用的最低iOS版本。找到TARGETS->General->Deployment Info->Deployment Info。设置之。我一般设置得稍微低一点,比如7.0。
5. Base SDK,即基本软件开发工具包的版本
这个是设置创建应用时所用到的工具包版本(创建应用时会用到跟特定系统版本对应的API和库文件)。由于工具包一般向下兼容,所以这个也是能运行该应用的最高系统版本。默认设置为最新版。找到TARGETS->Build Settings->Architectures->Base SDK,看看是否是最新版。
二,打包归档过程中需要设置的地方
1. Icon, 图标
先通过File->New->File->iOS->Resource->Asset Catalog, 创建一个XXX.xcassets文件夹,如果之前没有的话。在里面新建一个图标文件夹,并添加各种分辨率的图标。然后找到TARGETS->General->App Icons and Launch Images->App Icons Source,选择Use asset catalogs,并选择自己新建的图标文件夹。
2. Launch images,启动画面
和设置图标程序一致,设置地方也一致。
3. Version(版本号)和Build(打包数)
找到TARGETS->General->Identity->Version和Build。 Version是应用的版本号,Build是应用在该版本号下第几次打包。在Info.plist(即TARGETS->Info->Custom iOS Target Properties)里面,Version对应的是Bundle versions string, short,而Build对应的是Bundle version。如果这两个没有设置会出现如下报错:
-Unable to validateyour application: The info.plist in the package must contain theCFBundleShortVersionString key
-Unable to validate your application: The package does not contain aninfo.plist
4. Code signing,代码签名
找到TARGETS->Build Settings->Code Signing,选择自己的签名。如果要发布的话,选择iOS Distribution。这个证书需要在苹果的开发者平台上申请。申请完了,通过Xcode->Preferences->Accounts可以下载。
5. 是否启用iPad多任务功能(分屏)
Xcode升级到7之后默认启用iOS 9的iPad分屏功能,但是该功能要求横竖屏可以自动变换,否则有冲突。如果必须锁死横竖屏的话就需要关闭该特性。找到TARGETS->General->Deployment Info,在Require full Screen前打勾,否则会出现如下报错:
ERROR ITMS-90474:"Invalid Bundle. iPad Multitasking support requires these orientations: 'UIInterfaceOrientationPortrait, UIInterfaceOrientationPortraitUpsideDown, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight'. Found 'UIInterfaceOrientationPortrait' in bundle 'com.xxx.xxx'."
6. Archive,归档
苹果是通过归档把应用递交到iTunes Connect然后申请发布到App store的。先把电脑接上手机,然后在Xcode左上角播放键和关闭键右边的空栏里选择自己的手机为active scheme。然后在菜单里找到Product->Archive进行归档。如果没有接上手机,该菜单项显示为灰色。
三,集成第三方SDK后需要设置的地方
集成了第三方SDK之后,由于这些SDK没有根据新版iOS系统或者Xcode进行更新,导致不支持某些“新”特性。所用需要在Xcode中关闭这些“新”特性。比如本人在集成友盟的社会化分享以及各种广告平台的时候就遇到了这些问题。
1. 是否启用bitcode
如果打包时遇到如下报错:
-fembed-bitcode is not supported on versions of iOS prior to 6.0。
可能是因为Xcode默认支持bitcode (程序的一种中间代码,它可以让苹果在后期对我们的二进制码进行优化),但是有些第三方库并不支持bitcode,所以解决办法就是关闭它:找到TARGETS->Build Settings->Build Options->Enable Bitcode,将其设置为NO。
2. 设置App transport security
如果遇到如下报错:
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.
这是因为IOS9新增了App Transport Security特性,默认使用HTTPS协议。如果某些第三方SDK(比如广点通广告平台)在IOS9下直接进行HTTP请求就会报错。解决方法就是关闭这个特性: 找到TARGETS->Info->Cumstom ios Target Properties, 添加App Transport Security Settings,将其下面的Allow Arbitrary Loads设置为Yes。
3. 删除第三方Executable Key
如果遇到如下报错或类似如下报错:
ERROR ITMS-90535:“Unexpected CFBundleExecutable Key. The bundle at 'Payload/XXX.app/TencentOpenApi_IOS_Bundle.bundle' does not contain a bundle executable. If this bundle intentionally does not contain an executable, consider removing the CFBundleExecutable key from its Info.plist and using a CFBundlePackageType of BNDL. If this bundle is part of a third-party framework, consider contacting the developer of the framework for an update to address this issue.”
英文好的小伙伴读了之后应该能看出是怎么回事了。这是因为第三方的Info.plist里面含有Executable file这个Key,但实际上包里面又没有可执行文件。解决办法就是删除这个Key。比如我这里报错就是因为友盟的腾讯API库里就这么个Info.plist,它在这里:
然后把里面的Executable Key删了就行了。千万别把自己的项目里面的Executable Key给删了。
水平有限,如有不妥,欢迎拍砖!