title: Defold iOS 平台开发
::: sidenote 必須使用 Mac版 Defold編輯器 才能打包 iOS 項目. :::
iOS 要求 所有 运行于手机或者平板电脑上的应用 必须 使用 Apple 核发的 certificate 和 provisioning profile 进行签名. 本教程介绍了 iOS 平台的游戏打包. 在开发阶段, 推荐使用 开发用app 以利用热重载功能实现对移动设备的无线推送.
iOS 应用安全包含几个要素. 通过访问 Apple's iOS Developer Program 可以得到必要的工具. 如需注册, 请访问 Apple's Developer Member Center.
Certificates, Identifiers & Profiles 部分包含了所有所需工具. 在这里可以创建, 删除和编辑:
Certificates : Apple 为开发者颁发的加密证书. 分为开发证书和发布证书两种. 开发证书用以在沙盒环境中测试某些功能比如应用内购. 发布证书是将应用发布到 App Store 时用的证书. 在设备上测试之前要用证书对应用进行签名.
Identifiers
: 应用id. 用于多个应用的通配符id (类似 some.prefix.*) 是允许的. 应用id也在集成某些服务时使用, 比如 Passbook, Game Center 之类的. 这种情况下不支持通配符id. 因为使用服务时 bundle identifier 必须与应用id一致.
Devices : 用于开发的设备要注册 UDID (Unique Device IDentifier, 见下文).
Provisioning Profiles : 提供商档案与应用id与开发设备的证书相关. 这样可以确保让谁的哪个应用可以运行于哪个设备上.
在 Defold 中给应用做签名时, 需要提供加密证书和提供商档案文件.
::: sidenote Member Center 页面的一些功能在 Xcode 里也可以进行---前提是先安装好Xcode. :::
Device identifier (UDID) : iOS 设备的 UDID 可以通过wifi或者线路连接计算机查找. 打开 Xcode 选择 Window ▸ Devices and Simulators. 选中设备就会显示出序列号和UDID.
如果没安装 Xcode也可以从 iTunes 里查看. 首先选中要查看的设备.
从 Xcode 7 开始, 所有人都被允许安装 Xcode 并且免费开发设备应用. 无需注册iOS开发者. Xcode 会为设备自动核发一个临时开发者证书 (有效期1年) 和一个临时应用提供商档案 (有效期1周).
::: important 请牢记 bundle identifier 因为在 Defold 项目中需要配置同样的 bundle identifier. :::
这个供应商档案文件连同加密证书可以在 Defold 为应用签名, 有效期为一周.
档案过期后, 可以在 Xcode 里如法炮制再次生成临时档案文件.
如果你有加密证书和这个供应商档案文件, 就可以在编辑器里打包应用了. 从菜单中选择 Project ▸ Bundle... ▸ iOS Application....
选择证书和档案. 设置架构 (32 bit, 64 bit 和 iOS 模拟器) 再选择打包模式 (Debug 或者 Release). 也可以取消选择 Sign application 跳过签名步骤留待后面完成.
::: important
要在模拟器中测试游戏 必须取消 Sign application 选项. 否则的话游戏能安装却不能运行.
:::
点击 Create Bundle 并选择打包应用存放位置.
可以在 game.project 项目配置文件的 iOS 部分 设置应用的图标, 启动屏幕 storyboard 等等.
选择编辑器中的 "Install on connected device" 和打包对话框的 "Launch installed app" 即可安装和运行应用:
这个特性需要你先安装好 ios-deploy 命令行工具. 最简单的方法是使用 Homebrew:
$ brew install ios-deploy
如果编辑器无法自动找到 ios-deploy 工具, 你需要在 Preferences 中手动指定.
使用 Xcode 创建 storyboard. 启动 Xcode 新建一个项目. 选择 iOS 和单视图应用:
点击 Next 继续配置项目并输入名称:
点击 Create 完成项目创建. 接下来就可以创建 storyboard 了:
把需要的图片拖入项目. 然后打开 Assets.xcassets, 再把图片拖放到 Assets.xcassets 中去:
打开 LaunchScreen.storyboard 点击加号 (+) 按钮. 输入 "imageview" 找到 ImageView 控件.
把控件拖放到 storyboard 上:
从下拉列表中选择刚才放入 Assets.xcassets 的图片:
摆放好位置定义好组件, 比如可以加个标签什么的. 配置好之后选择 "Build -> Any iOS Device (arm64, armv7)"(或者 "Generic iOS Device") 然后 Product -> Build. 等待编译完成.
::: sidenote
如果你的 "Any iOS Device (arm64)" 里只有一个 arm64 选项, 则需要把 "Project -> Basic -> Deployment" 里的 iOS Deployment target 设置为 10.3. 这样你的 storyboard 才能支持 armv7 设备 (比如 iPhone5c)
:::
在 storyboard 里使用的图片不会自动包含进 LaunchScreen.storyboardc 里. 要在 game.project 的 Bundle Resources 选项中配置需要包含的图片资源.
例如, 在 Defold 项目目录下有个 LaunchScreen 文件夹, 里面包含 ios 文件夹 (ios 文件夹下的文件只针对 ios 打包使用), 所以先要把资源文件放入 LaunchScreen/ios/. 然后配置 Bundle Resources 为此路径.
最后一步, 拷贝编译生成的 LaunchScreen.storyboardc 文件. 打开仿达, 把 LaunchScreen.storyboardc 文件粘贴到你的 Defold 项目目录:
/Library/Developer/Xcode/DerivedData/YOUR-PRODUCT-NAME-cbqnwzfisotwygbybxohrhambkjy/Build/Intermediates.noindex/YOUR-PRODUCT-NAME.build/Debug-iphonesimulator/YOUR-PRODUCT-NAME.build/Base.lproj/LaunchScreen.storyboardc
::: sidenote 社区牛人 Sergey Lerg 已把上述步骤 录成了视频 供大家参考. :::
得到 storyboard 文件之後就可以在 game.project 裏引用它了.
::: sidenote 從 Defold 1.2.175 版本開始需要這個設置. :::
Apple 建議使用圖標資源列表來管理應用圖標. 這也是能讓你的圖標在 App Store 裏展示出來的唯一方法. 建立圖標資源表跟建立 storyboard 類似, 也要使用 Xcode. 啓動 Xcode 新建項目. 選擇 iOS and Single View App:
點擊 Next 進行設置操作. 輸入產品名:
點擊 Create 完成配置工作. 此時項目已經建立, 接著就可以繼續建立資源列表了:
依據圖標大小把圖片分別拖放到空白方框裏:
::: sidenote Notifications, Settings 和 Spotlight 這三項不要拖放圖標. :::
完成之后, 配置好之后选择 "Build -> Any iOS Device (arm64, armv7)"(或者 "Generic iOS Device") 然后 Product -> Build. 等待编译完成.
::: sidenote
确保编译目标为 "Any iOS Device (arm64)" 或者 "Generic iOS Device", 否则上传游戏时会报 ERROR ITMS-90704 错误.
:::
最後一步是將編譯好的 Assets.car 文件拷貝到你的 Defold 項目中去. 打開訪達依照如下路徑找到 Assets.car 文件, 將其複製到 Defold 項目中:
/Library/Developer/Xcode/DerivedData/YOUR-PRODUCT-NAME-cbqnwzfisotwygbybxohrhambkjy/Build/Products/Debug-iphoneos/Icons.app/Assets.car
得到圖標資源列表文件之後就可以在 game.project 裏引用它和其中的圖標了:
::: sidenote
無需在 game.project 裏設置 App Store 的圖標. App 上傳到 iTunes Connect 時, 圖標會自動從 Assets.car 文件中選取並解壓出來.
:::
编辑器对iOS应用打包后生成 .ipa 文件. 要安装此文件, 可以使用以下所列举工具之一:
可以使用 xcrun simctl 命令行工具与 Xcode 的 iOS 模拟器进行交互:
# 显示可用设备列表
xcrun simctl list
# 启动 iPhone X 模拟器
xcrun simctl boot "iPhone X"
# 在模拟器上安装 your.app
xcrun simctl install booted your.app
# 启动模拟器
open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
将游戏上传到 App Store 时要提供加密部分的出口合规信息. Apple 在此解释了这个需求的原因:
"把应用往 TestFlight 或者 App Store 上传的时候, 你是把应用上传到了美国的服务器上. 一旦要把应用分发到美国或者加拿大之外的国家, 无论你的法人实体在哪里, 都必须遵守美国出口法案. 如果你的应用使用, 访问, 包含, 实现, 或者汇入了加密内容, 就会被视作加密软件出口, 这意味着你的应用必须符合美国出口法案的要求, 同时也要符合你的出口目的国家的法律需求."
相关文档:
Defold 引擎会对以下内容实施加密: