赞
踩
苹果开发者平台 https://developer.apple.com/
类型 | 用途 | 限制 | 费用 |
---|---|---|---|
个人开发者账号 | 用于个人开发者进行开发和向AppStore上传应用 | 只能有一个开发者,调试设备受限 | $99 |
公司开发者账号 | 用于公司或团队进行开发和向AppStore上传应用 | 可以有多个开发者,调试设备受限,将个人开发者邀请到团队中来 | $99 |
企业开发者账号 | 用于企业内部发布,不需要审核,但是不能将应用发布到AppStore | 任何设备都可以通过苹果OTA方式进行安装 | $290 |
证书是对电脑开发资格的认证,需要在电脑上安装证书才能正常打包,每个开发者帐号有一套,分为两种:
在钥匙串中,找到我的证书
苹果开发者平台 https://developer.apple.com/
和unity中的Identifiers保持一致
获取设备的udid
第一种直接在XCode中查看
第二种通过蒲公英等工具获取,https://www.pgyer.com/tools/udid?sl=WrUS
填写对应的appid
下载下来,后面打包发布会用到,文件后缀为mobileprovision
主要有 dev
、release
、hoc
几种版本
//打包后调用 [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(Path.Combine(buildPath, "Info.plist"))); plist.root.SetString("NSCameraUsageDescription", "APP需要您的同意,才能使用摄像头,以便于相机拍摄,检测现场环境"); plist.root.SetString("NSMicrophoneUsageDescription", "APP需要您的同意,才能使用麦克风,以便于视频录制、语音识别、语音聊天"); //缺少合规证明 plist.root.SetBoolean("ITSAppUsesNonExemptEncryption", false); //URL Schemes var 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"); //scheme plist.WriteToFile(Path.Combine(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能看到所有的属性名。
Xcode>Preferences>Accounts
需要设置为No
,否则发布时编译会无法通过
用2019等较低的Unity版本打的包,需要勾选
File>ProjectSetting>Do not show a diagnostic…
文件读取授权,在终端窗口输入
chmod +x MapFileParser.sh文件的完整路径
测试包(Debug):用usb连接iPhone手机,选择该设备,点击Build
正式包(Release):Product > Archive,等待构建成功后,依次点击上传发布
提示:选中Xcode然后 状态栏Window - >Organizer就可以看到所有的Archive版本啦!
前往苹果开发者平台的app store页面,新建App
证书与文件配置:
https://zhuanlan.zhihu.com/p/208896244
打包视频教程:
https://www.bilibili.com/video/BV1Qt4y1a7aW?p=12&vd_source=226406b39053c6ed9e7307c51d05c436
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 FRAMEWORK find "$APP_PATH" -name 'AgoraRtcWrapper.framework' -type d | while read -r FRAMEWORK do FRAMEWORK_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 $ARCHS do echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME" lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH" EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH") done echo "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
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。