当前位置:   article > 正文

unity自动出包xcode工程_pbxcapabilitytype.signinwithapple

pbxcapabilitytype.signinwithapple

前言:unity出ios包的时候,xcode工程都需要设置一些参数,特别是接入一些第三方的SDK

的时候,需要引入一些新的库,每次出包,都需要操作一次,很麻烦,于是这算是一个自动出包的工具

主要使用类是PBXproject类

 [PostProcessBuild()]

public static void OnPostProcessBuild(BuildTarget target, string xcodeprojectpath)

OnPostProcessBuild构建玩xcode工程后,回调

1.AddCapabilityToPbx  添加授限:

高于unity2017可直接使用               pbxProject.AddCapability(IPHONE_GUID,PBXCapabilityType.SignInWithApple);

我的版本校旧,使用以下方法,文件路径 xcodeprojectpath/Unity-iPhone/xxx.entitlements

  1. PlistDocument tempEntitlements = new PlistDocument();
  2. Dictionary<string, PlistElementArray> capabilityList = new Dictionary<string, PlistElementArray>();
  3. capabilityList[你要填的key] = (tempEntitlements.root[你要填的key] = new PlistElementArray()) as PlistElementArray;
  4. capabilityList[你要填的key].values.Add(new PlistElementString(你要填的Value));
  5. tempEntitlements.WriteToFile(xcodeprojectpath/Unity-iPhone/xxx.entitlements);
  6. ((PBXProject)pbxProject).SetBuildProperty(IPHONE_GUID, "CODE_SIGN_ENTITLEMENTS", relativeEntitlementFilePath);

list类似一个字典,下面是几个授权常用的key和value :

              com.apple.developer.applesignin     Default  对应signin 内购授权

              keychain-access-groups                  id           对应钥匙串共享key授权,

              

               这个比较特别,

              aps-environment                              development或production    对应推送授权push notify

特别的权限 需要在info.plist添加

string UIBackground = "UIBackgroundModes";
        string uibackvalue = m_platform.GetInfo(UIBackground);
        if (uibackvalue != null)
        {
            PlistElementArray backgroudArr = dict.CreateArray(UIBackground);
            backgroudArr.AddString(uibackvalue);
        }

2.修改teamid和证书

 pbxProject.SetBuildProperty(IPHONE_GUID, Key, Value);

一句代码,下面是key和value对应,Automatic代表自动分发证书

 Key   CODE_SIGN_STYLE   PROVISIONING_PROFILE_SPECIFIER   DEVELOPMENT_TEAM

Value      Manual/Automatic               证书名                                            teamid

3.引入库

普通库:

fileGuid = _pbx.AddFile(path, path, PBXSourceTree.Sdk);

_pbx.AddFileToBuild(tagProGuid, fileGuid);

动态库: 

fileGuid = _pbx.AddFile(path, path, PBXSourceTree.Sdk);
_pbx.AddFileToBuild(tagProGuid, fileGuid);
PBXProjectExtensions.AddFileToEmbedFrameworks(_pbx, tagProGuid, fileGuid)

添加的库需要配置searchpath选项:

framework的库使用 _pbx.AddBuildProperty(tagProGuid, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/" + 路径);

.a的库使用 _pbx.AddBuildProperty(tagProGuid, "LIBRARY_SEARCH_PATHS", "$(PROJECT_DIR)/" + 路径);

embed动态的库_pbx.SetBuildProperty(tagProGuid, "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks");

  4.修改buildsetting

设置

pbxProject.AddBuildProperty(IPHONE_GUID,"OTHER_LDFLAGS"," -ObjC");

pbxProject.SetBuildProperty(IPHOTHER_LDFLAGSONE_GUID, VALID_ARCHS,arm64);

5.修改info.plist

  1. PlistDocument plist = new PlistDocument();
  2. string filePath = Path.Combine(SaveXcodePath, "Info.plist");
  3. plist.ReadFromFile(filePath);
  4. #region 打开设置权限
  5. PlistElementDict dict = plist.root.AsDict();
  6. PlistElementArray arrartemp = dict.CreateArray("CFBundleURLTypes");
  7. List<string> listSetURLTypees = new List<string>();
  8. m_platform.GetXmlSetXcodeList("Info/CFBundleURLTypes/CFBundleURLSchemes", ref listSetURLTypees);
  9. //Dictionary<string, PlistElementArray> URLTypesDict = new Dictionary<string, PlistElementArray>();
  10. foreach (var v in listSetURLTypees)
  11. {
  12. Debug.Log("sssssssssssss" + v);
  13. PlistElementDict dictemp = arrartemp.AddDict();
  14. Dictionary<string, PlistElementArray> URLTypesDict = new Dictionary<string, PlistElementArray>();
  15. URLTypesDict["CFBundleTypeRole"] = dictemp.CreateArray("CFBundleTypeRole");
  16. URLTypesDict["CFBundleTypeRole"].AddString("Editor");
  17. URLTypesDict["CFBundleURLSchemes"] = dictemp.CreateArray("CFBundleURLSchemes");
  18. URLTypesDict["CFBundleURLSchemes"].AddString(v);
  19. }

 plist.WriteToFile(filePath);

 设置xcscheme

  1. string filePath = Path.Combine(SaveXcodePath, "Unity-iPhone.xcodeproj/xcshareddata/xcschemes/Unity-iPhone.xcscheme");
  2. string content = File.ReadAllText(filePath);
  3. if (content.IndexOf("enableGPUValidationMode") != -1)
  4. return;
  5. int index = content.IndexOf("allowLocationSimulation");
  6. if (index == -1)
  7. {
  8. Logger.Error("not find allowLocationSimulation option");
  9. return;
  10. }
  11. content = content.Insert(index, "enableGPUValidationMode=\"1\" ");
  12. File.WriteAllText(filePath, content);

保存

string rootPath = PBXProject.GetPBXProjectPath(SaveXcodePath);((PBXProject)pbxProject).WriteToFile(rootPath);

        

        

        

        

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/82940
推荐阅读
相关标签
  

闽ICP备14008679号