开发过程中想利用window系统打包Ipa文件,找到了ios project builder这个软件,这里简单记录一下使用方法。
按照ios project builder提供的步骤,
1.先通过执行MigrationAssistant文件夹下的Migration assistant (step 1, Mac).command命令行,在Mac环境下导出证书与mobileprovision以及IOS SDK
2.在Window环境下执行Migration assistant (step 2, PC).cmd命令行,安装从Mac环境下的导出的证书与SDK。
执行Build and deploy后导出Ipa文件。
Unity导出Xcode工程的过程中常常需要引用第三方SDK和修改plist文件。UnityEditor.iOS.Xcode中利用
PBXProject和PlistDocument 可以帮助我们自动导入和修改文件。
public class XCodeProjectMod : MonoBehaviour
{
[PostProcessBuild]
public static void OnPostprocessBuild(BuildTarget BuildTarget, string path)
{
if (BuildTarget == BuildTarget.iOS)
{
UnityEngine.Debug.Log("XCodePostProcess: Starting to perform post build tasks for iOS platform.");
/*======== projPath ========*/
string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
PBXProject proj = new PBXProject();
proj.ReadFromFile(projPath);
string target = proj.TargetGuidByName("Unity-iPhone");
// ENABLE_BITCODE=False
proj.SetBuildProperty(target, "ENABLE_BITCODE", "false");
// add extra framework(s)
proj.AddFrameworkToProject(target, "Security.framework", false);
proj.AddFrameworkToProject(target, "CoreTelephony.framework", true);
proj.AddFrameworkToProject(target, "libz.tbd", true);
// rewrite to file
File.WriteAllText(projPath, proj.WriteToString());
string plistPath = path + "/Info.plist";
PlistDocument plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));
// Get root
PlistElementDict rootDict = plist.root;
/* ipad 关闭分屏 */
rootDict.SetBoolean("UIRequiresFullScreen", true);
rootDict.SetBoolean("UIFileSharingEnabled", true);
//var now = System.DateTime.Now;
//string time = string.Format("{0}_{1}_{2} {3}:{4}:{5}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second);
///* 设置Build值 */
//rootDict.SetString("CFBundleVersion", string.Format("{0}({1})", GlobalVars.VERSION, time));
/* iOS9所有的app对外http协议默认要求改成https */
// Add value of NSAppTransportSecurity in Xcode plist
var atsKey = "NSAppTransportSecurity";
PlistElementDict dictTmp = rootDict.CreateDict(atsKey);
dictTmp.SetBoolean("NSAllowsArbitraryLoads", true);
// location native development region
rootDict.SetString("CFBundleDevelopmentRegion", "zh_CN");
// for share sdk 截屏
//rootDict.SetString("NSPhotoLibraryUsageDescription", "We need use photo library usage");
// Write to file
File.WriteAllText(plistPath, plist.WriteToString());
}
}
}