必須使用 Mac版 Defold編輯器 才能打包 iOS 項目.
iOS 要求 所有 运行于手机或者平板电脑上的应用 必须 使用 Apple 核发的 certificate 和 provisioning profile 进行签名. 本教程介绍了 iOS 平台的游戏打包. 在开发阶段, 推荐使用 开发用app 以利用热重载功能实现对移动设备的无线推送.
iOS 应用安全包含几个要素. 通过访问 Apple’s iOS Developer Program 可以得到必要的工具. 如需注册, 请访问 Apple’s Developer Member Center.
Certificates, Identifiers & Profiles 部分包含了所有所需工具. 在这里可以创建, 删除和编辑:
some.prefix.*
) 是允许的. 应用id也在集成某些服务时使用, 比如 Passbook, Game Center 之类的. 这种情况下不支持通配符id. 因为使用服务时 bundle identifier 必须与应用id一致.在 Defold 中给应用做签名时, 需要提供加密证书和提供商档案文件.
Member Center 页面的一些功能在 Xcode 里也可以进行—前提是先安装好Xcode.
如果没安装 Xcode也可以从 iTunes 里查看. 首先选中要查看的设备.
从 Xcode 7 开始, 所有人都被允许安装 Xcode 并且免费开发设备应用. 无需注册iOS开发者. Xcode 会为设备自动核发一个临时开发者证书 (有效期1年) 和一个临时应用提供商档案 (有效期1周).
请牢记 bundle identifier 因为在 Defold 项目中需要配置同样的 bundle identifier.
确保 Xcode 为app生成了 Provisioning Profile 和 Signing Certificate.
确定应用正常运行后, 在硬盘上找到编译好的app. 可以在 “Report Navigator” 的编译报告里找到app位置.
找到app, 右键选择 Show Package Contents.
这个供应商档案文件连同加密证书可以在 Defold 为应用签名, 有效期为一周.
档案过期后, 可以在 Xcode 里如法炮制再次生成临时档案文件.
如果你有加密证书和这个供应商档案文件, 就可以在编辑器里打包应用了. 从菜单中选择 Project ▸ Bundle... ▸ iOS Application....
选择证书和档案. 设置架构 (32 bit, 64 bit 和 iOS 模拟器) 再选择打包模式 (Debug 或者 Release). 也可以取消选择 Sign application
跳过签名步骤留待后面完成.
要在模拟器中测试游戏 必须取消 Sign application
选项. 否则的话游戏能安装却不能运行.
点击 Create Bundle 并选择打包应用存放位置.
可以在 game.project 项目配置文件的 iOS 部分 设置应用的图标, 启动屏幕 storyboard 等等.
打包游戏时, 需要选择你想用的引擎类型. 有三个基本类型可以选择:
这些类型即是 Build variants
使用 Project ▸ Build 时使用的是 debug 版引擎.
此版本通常在游戏开发阶段使用, 因为它具有许多有用的调试功能:
print()
功能, 原生扩展使用 dmLogInfo()
, dmLogError()
之类的功能记录日志. 如何阅读日志参见 游戏和系统日志教程.此版本移除调试功能. 准备发布到应用商店时使用此版本. 基于以下原因不推荐发布包含调试功能的游戏:
此版本没有图像和声音. 也就是说它可以 CI 服务器上进行 unit/smoke 测试, 甚至可以在云端作为服务器程序使用.
选择编辑器中的 “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. 等待编译完成.
如果你的 “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
社区牛人 Sergey Lerg 已把上述步骤 录成了视频 供大家参考.
得到 storyboard 文件之後就可以在 game.project 裏引用它了.
從 Defold 1.2.175 版本開始需要這個設置.
Apple 建議使用圖標資源列表來管理應用圖標. 這也是能讓你的圖標在 App Store 裏展示出來的唯一方法. 建立圖標資源表跟建立 storyboard 類似, 也要使用 Xcode. 啓動 Xcode 新建項目. 選擇 iOS and Single View App:
點擊 Next 進行設置操作. 輸入產品名:
點擊 Create 完成配置工作. 此時項目已經建立, 接著就可以繼續建立資源列表了:
依據圖標大小把圖片分別拖放到空白方框裏:
Notifications, Settings 和 Spotlight 這三項不要拖放圖標.
完成之后, 配置好之后选择 “Build -> Any iOS Device (arm64, armv7)”(或者 “Generic iOS Device”) 然后 Product -> Build. 等待编译完成.
确保编译目标为 “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 裏引用它和其中的圖標了:
無需在 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
隐私清单是一个属性列表, 用于记录您的应用或第三方 SDK 收集的数据类型, 以及使用 API 的理由. 对于您的应用或第三方 SDK 收集的每种类型的数据以及使用 API 的理由, 需要记录在其捆绑的隐私清单文件中.
Defold 在 game.project 文件里的 Privacy Manifest 项提供了默认的清单文件. 创建应用程序包时, 隐私清单将与项目依赖项中的各个隐私清单合并, 包含在应用程序包中.
关于隐私清单更多详情请参考 Apple 的官方文档.
将游戏上传到 App Store 时要提供加密部分的出口合规信息. Apple 在此解释了这个需求的原因:
“把应用往 TestFlight 或者 App Store 上传的时候, 你是把应用上传到了美国的服务器上. 一旦要把应用分发到美国或者加拿大之外的国家, 无论你的法人实体在哪里, 都必须遵守美国出口法案. 如果你的应用使用, 访问, 包含, 实现, 或者汇入了加密内容, 就会被视作加密软件出口, 这意味着你的应用必须符合美国出口法案的要求, 同时也要符合你的出口目的国家的法律需求.”
相关文档:
Defold 引擎会对以下内容实施加密:
A: 請確保游戲包 id 與 Defold 導出的 Xcode 項目檔案裏設置的 id 是一致的.
A: 参见 应用的权限检查:
$ codesign -d –ent :- /path/to/the.app
A: 参见 档案设置的权限检查:
$ security cms -D -i /path/to/iOSTeamProfile.mobileprovision
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB