XUnityDeploy是针对Unity自动化编译Android/IOS的脚本。
-
Xcode
Version > 7.0 -
Ruby
Version > 2.0 -
Unity
Version > 5.0, 其中需要配置Android SDK,JDK, NDK等 -
Git
orSvn
-
把
XUnityDeploy
放在Assets
的同级目录 -
拷贝
plugins/Editor
到Assets/Editor
-
配置参数
XUnityDeploy_configs
下的main.info.json
,main.projmods.json
,export.plist
,unity_deploy.plist
-
ruby scripts/run_unity.rb -p ios[android]
-
由
run_unity
启动脚本 -
Ruby
脚本生成Unity
需要的配置unity_deploy
-
XUnityDeploy
读取unity_deploy
配置,配置Unity
项目,最后编译项目 -
UnityDeployPostprocess
在编译Unity
之后需要配置Xcode
项目(IOS)- 读取
main.build
,获取info
- 获取
projmods
,配置Xcode
项目 - 获取
info
, 配置Xcode
的Info.plist
- 读取
-
对生成包进行重命名,并提交到down serve上
- rake update 更新项目
- rake compile:ios 编译ios项目
- rake compile:android 编译android项目
- rake install:ios 安装ios包
- rake install:android 安装android包
-
builds 最终生成包的目录(apk, xcode project, ipa)
-
../XUnityDeploy_configs 配置文件目录
android.keystore
是Android
的签名文件,需要自己替换,并在unity_deploy
中配置keystoreexport.plist
是导出ipa
包xcode
需要的配置文件。其中method
是app-store
,enterprise
,ad-hoc
,development
。参考export.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compileBitcode</key>
<false/>
<key>method</key>
<string>development</string>
<key>teamID</key>
<string>your team id</string>
<key>provisioningProfiles</key>
<dict>
<key>your bundle id</key>
<string>your provision name</string>
</dict>
<key>signingCertificate</key>
<string>iPhone Developer</string>
<key>signingStyle</key>
<string>manual</string>
</dict>
</plist>
unity_deploy.json
是Unity
在XUnityDeploy
中读取的配置,用于配置Unity
的项目
{
"ios" :
{
"Version" : "1.0",
"BundleVersionCode": 1,
"BundleIdentifier" : "com.501joy.over14",
"ProductName" : "XUnityDeploy",
"IsDevelopment" : false,
"DefineSymbols" : "EXAMPLE",
"StrippingLevel" : "UseMicroMSCorlib",
"ScriptCallOptimizationLevel" : "FastButNoExceptions",
"IOSTargetOSVersion" : "7.0",
"AotOptions" : "nimt-trampolines=256",
"ScriptBackent" : "IL2CPP",
"Channel" : "500026"
},
"android" :
{
"Version" : "1.0",
"BundleVersionCode" : 1,
"BundleIdentifier" : "com.501joy.over14",
"ProductName" : "XUnityDeploy",
"IsDevelopment" : false,
"DefineSymbols" : "EXAMPLE",
"StrippingLevel" : "UseMicroMSCorlib",
"OBB" : false,
"ScriptBackent" : "IL2CPP",
"KeystoreName" : "android.keystore",
"KeystorePass" : "example",
"KeyaliasName" : "example",
"KeyaliasPass" : "example",
"Channel" : "600001"
}
}
-
jenkins jenkins目录
-
logs 编译日志目录
-
scripts 运行脚本命令目录
-
tools 工具目录
-
unitys 编译脚本目录
-
utils 帮助脚本目录
-
executeMethod class 'XUnityDeploy' could not be found
需要把plugins/Editor
拷贝到Assets/Editor
-
这里关于
xcode
项目的配置在Unity
的XUnityDeploy
处理了,也就是配置main.projmods.json
中的build_settings
。这里还有一种方法在编译Unity
之后,通过Xcodeproj配置xcode
-
Error Domain=IDEDistributionErrorDomain Code=1 "The operation couldn’t be completed
修改export.plist
。还碰到过WWDR certificate expired
, 需要重新更新一下,参考 -
因为
Unity
切换平台(ios/android)比较慢,所以这里建议针对ios/android单独checkout一个目录 -
Error Domain=IDEDistributionErrorDomain Code=14 "No applicable devices found."
。这里需要把Ruby
版本设置为system
,即使用rvm use system
参考
在项目中,需要支持游戏APP应用名称多国化,只需要配置一个i18n.projmods.json
即可,在i18n.projmods.json
中,指定对于的InfoPlist.strings
, 比如
"files":
[
"i18n/en.lproj/InfoPlist.strings",
"i18n/zh-Hans.lproj/InfoPlist.strings",
"i18n/zh-Hant.lproj/InfoPlist.strings"
],
需要注意的是,在XCProject.cs
中,需要ignore重复存在的情况
-
检查编译环境的脚本
-
自动提交客户端的脚本
-
用
Xcodeproj
替代Editor/XCodeEditor