700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Unity iOS打包发布流程

Unity iOS打包发布流程

时间:2020-03-27 13:55:50

相关推荐

Unity iOS打包发布流程

一、版本说明

Unity .3.33fMacOS Monterey 12.3.1XCode 13.4.1

二、开发者账号

苹果开发者平台 /

三、证书

【1】创建证书签名文件(CSR)

【2】在线申请证书

证书是对电脑开发资格的认证,需要在电脑上安装证书才能正常打包,每个开发者帐号有一套,分为两种:

Developer Certification(开发证书):用于开发测试;Distribution Certification(发布证书):用于打包测试ipa或者Appstore的安装包;

【3】关联签名文件,并下载证书双击使用

【4】导出p12文件,供其他电脑使用

在钥匙串中,找到我的证书

四、APPID相关(用于后续出包)

苹果开发者平台 /

【1】Identifiers(BoundID)

和unity中的Identifiers保持一致

【2】Devices(添加测试设备UDID)

获取设备的udid

第一种直接在XCode中查看

第二种通过蒲公英等工具获取,/tools/udid?sl=WrUS

【3】Profiles(与证书配套使用的描述文件)

填写对应的appid

下载下来,后面打包发布会用到,文件后缀为mobileprovision

主要有devreleasehoc几种版本

五、Unity打包iOS相关

【1】注意事项

需要添加icon图,不然xcode出包会报错Build 如果在版本号不变的情况下,每次打包需要递增Scripting Backend IL2CPP相机、麦克风、定位等如果使用到的权限需要添加描述ios最低版本号要求Architecture(架构) 需要设置为ARM64

【2】通过c#修改XCode项目配置(可跳过)

//打包后调用[PostProcessBuild]static void OnBuildFinish(BuildTarget target, string buildPath){if (target == BuildTarget.iOS){SetXCodePro(buildPath);}Debug.Log("打包完成!");}static void SetXCodePro(string buildPath){PBXProject project = new PBXProject();project.ReadFromString(File.ReadAllText(PBXProject.GetPBXProjectPath(buildPath)));string targetGuid = project.GetUnityMainTargetGuid();//添加库//project.AddFrameworkToProject(targetGuid,"ARKit.framework",false);//添加权限PlistDocument plist = new PlistDocument();plist.ReadFromString(File.ReadAllText(bine(buildPath, "Info.plist")));plist.root.SetString("NSCameraUsageDescription", "APP需要您的同意,才能使用摄像头,以便于相机拍摄,检测现场环境");plist.root.SetString("NSMicrophoneUsageDescription", "APP需要您的同意,才能使用麦克风,以便于视频录制、语音识别、语音聊天");//缺少合规证明plist.root.SetBoolean("ITSAppUsesNonExemptEncryption", false);//URL Schemesvar urlTypeArray = plist.root.CreateArray("CFBundleURLTypes");var urlTypeDict = urlTypeArray.AddDict();urlTypeDict.SetString("CFBundleTypeRole", "Editor");urlTypeDict.SetString("CFBundleURLName", "com.pisx.cy");var urlScheme = urlTypeDict.CreateArray("CFBundleURLSchemes");urlScheme.AddString("cy"); //schemeplist.WriteToFile(bine(buildPath, "Info.plist"));//设置签名证书project.SetBuildProperty(targetGuid, "CODE_SIGN_IDENTITY", "Apple Development: xin yang (V6P37FUD2P)");//project.SetBuildProperty(targetGuid, "PROVISIONING_PROFILE_SPECIFIER", "");project.SetBuildProperty(targetGuid, "ENABLE_BITCODE", "NO");project.WriteToFile(PBXProject.GetPBXProjectPath(buildPath));}

Xcode属性查看

在xcode工程所在目录右键->在终端中打开->输入命令xcodebuild -showBuildSettings能看到所有的属性名。

【3】打包结构图

.xcodeproj xcode工程文件info.plist 权限配置文件MapFileParser.sh 授权解析,终端命令, chmod +x 该文件路径

六、Xcode打包

【1】将unity打包好的xcode工程用Xcode打开

【2】登录自己的开发者账号

Xcode>Preferences>Accounts

【3】配置签名

【4】bitcode

需要设置为No,否则发布时编译会无法通过

【5】权限操作

用等较低的Unity版本打的包,需要勾选

File>ProjectSetting>Do not show a diagnostic…

文件读取授权,在终端窗口输入

chmod +x MapFileParser.sh文件的完整路径

【6】打包

测试包(Debug):用usb连接iPhone手机,选择该设备,点击Build

正式包(Release):Product > Archive,等待构建成功后,依次点击上传发布

提示:选中Xcode然后 状态栏Window - >Organizer就可以看到所有的Archive版本啦!

七、发布

前往苹果开发者平台的app store页面,新建App

【1】TestFlight

审核时间较短、一般用于内部测试可以生成公开链接(兑换码)的形式,在iPhone的TestFlight中下载应用进行试用(90天),这样外部人员也可以使用了。填写测试信息

【2】AppStore

审核时间长、较为严格、上架AppSrore,其他人可以进行下载需要填写详细的发布信息

【3】Hoc 用于内测,直接发布ipa

八、参考链接

证书与文件配置:

/p/208896244

打包视频教程:

/video/BV1Qt4y1a7aW?p=12&vd_source=226406b39053c6ed9e7307c51d05c436

九、Error合集

xxx.framework was build for iOS+iOS Simulator

项目 -> Build Settings -> Build Options -> Validate Workspace =Yes

no space left on devices

没有剩余空间,删除一些本地文件,留出内存

ERROR ITMS-90087: “Unsupported Architectures. The executable for XXX.app/Frameworks/XXXBLE.framework contains unsupported architectures ‘[x86_64]’.”

appstore不支持当前framework的架构,里面有不支持的静态库(framework)

$ lipo -info workspacePath/XXX.framework/XXX

命令来检查一下frame。

解决方法是生成binary的时候使用一段script来去掉那些不支持的结构。

在Xcode中选择项目->targets->Build Phases, 找到 Run Script。

Shell填入:/bin/sh

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"# This script loops through the frameworks embedded in the application and# removes unused architectures.#find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORKfind "$APP_PATH" -name 'AgoraRtcWrapper.framework' -type d | while read -r FRAMEWORKdoFRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"EXTRACTED_ARCHS=()for ARCH in $ARCHSdoecho "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")doneecho "Merging extracted architectures: ${ARCHS}"lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"rm "${EXTRACTED_ARCHS[@]}"echo "Replacing original executable with thinned version"rm "$FRAMEWORK_EXECUTABLE_PATH"mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"done

ERROR ITMS-90085: “No architectures in the binary. Lipo failed to detect any architectures in the bundle executable.”

这样的话需要修改一个地方就可以了,因为不是全部的sdk 都需要,只修改对应的就可以了。

原来:"$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK 更换后:"$APP_PATH" -name '[frameworkname].framework' -type d | while read -r

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。