Unity成功导出Xcode工程后自动修改一些设置

3 篇文章 0 订阅

最近用Unity接ios的sdk,用Unity导出Xcode工程后,由于刚刚开始,每次都是手动设置。后来看了Unity3D研究院之IOS全自动编辑framework、plist、oc代码(六十七)Unity-导出Xcode工程时的自动配置之后,用XUPorter试了一下,还是感觉不方便。看了Unity iOS一键打包之淘汰 XUPorter之后,决定学习一下Unity自带的API。

[PostProcessBuild]
    public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
    {
        if (buildTarget != BuildTarget.iOS) return;
        //这里是固定的
        string projPath = PBXProject.GetPBXProjectPath(path);
        PBXProject proj = new PBXProject();
        proj.ReadFromString(File.ReadAllText(projPath));
        string target = proj.TargetGuidByName("Unity-iPhone");
        
        //1、修改设置
        //添加系统库(第三方库还不会添加,现在是放在一个文件夹,拷贝到xcode工程的,以后会了再添加)
        proj.AddFrameworkToProject(target,"AssetsLibrary.framework", false);
        proj.AddFrameworkToProject(target,"AdSupport.framework", false);
        proj.AddFrameworkToProject(target,"Security.framework", false);
        proj.AddFrameworkToProject(target,"GameKit.framework", false);
        proj.AddFrameworkToProject(target,"SystemConfiguration.framework", false);  
        proj.AddFrameworkToProject(target,"CoreTelephony.framework", false);

        //添加tbd
        string fileGuidSqlite = proj.AddFile("usr/lib/libsqlite3.0.tbd", "Libraries/libsqlite3.0.tbd", PBXSourceTree.Sdk);
        proj.AddFileToBuild(target, fileGuidSqlite);
        string fileGuidLibz = proj.AddFile("usr/lib/libz.tbd", "Libraries/libz.tbd", PBXSourceTree.Sdk);
        proj.AddFileToBuild(target, fileGuidLibz);
        string fileGuidLibc= proj.AddFile("usr/lib/libc++.tbd", "Libraries/libc++.tbd", PBXSourceTree.Sdk);
        proj.AddFileToBuild(target, fileGuidLibc);
        string fileGuidLibstdc = proj.AddFile("usr/lib/libstdc++.tbd", "Libraries/libstdc++.tbd", PBXSourceTree.Sdk);
        proj.AddFileToBuild(target, fileGuidLibstdc);
        
        //修改属性
        proj.SetBuildProperty(target,"ENABLE_BITCODE", "NO");
        proj.SetBuildProperty(target,"GCC_ENABLE_CPP_EXCEPTIONS", "YES");
        proj.SetBuildProperty(target,"GCC_ENABLE_OBJC_EXCEPTIONS", "YES");
        proj.SetBuildProperty(target,"GCC_ENABLE_CPP_RTTI", "YES");
        proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC");
        proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-force_load");
        //添加Framework Search Paths、Header Search Paths、Library Search Paths
        //(这里默认的是non-recursive, 暂时不知道怎么添加recursive)
        proj.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "xxxx");
        proj.AddBuildProperty(target, "LIBRARY_SEARCH_PATHS", "xxxx");
        proj.AddBuildProperty(target, "HEADER_SEARCH_PATHS", "xxxx");

        File.WriteAllText(projPath, proj.WriteToString());

        //2、修改Info.plist文件
        var plistPath = Path.Combine(path, "Info.plist");
        var plist = new PlistDocument();
        plist.ReadFromFile(plistPath);
        //类似的都可以这样添加,这个比较简单
        //选择语言(字符串)
        plist.root.SetString("CFBundleDevelopmentRegion", "xxxx");
         //设置LSApplicationQueriesSchemes(数组)
        PlistElementArray loginChannelsArr;
        loginChannelsArr = plist.root.CreateArray("LSApplicationQueriesSchemes");
        loginChannelsArr.AddString("xxxx");
        //配置金额(字典)
        PlistElementDict plistMoneyDic;
        plistMoneyDic = plist.root.CreateDict("Dict");
        plistMoneyDic.SetString("key", "value");
        //(bool值)
        plist.root.SetBoolean("supportMobile",false);
        //复杂的是,配置urlSchemes(数组里面有字典,字典里面有子数组)
        PlistElementArray urlTypes = plist.root.CreateArray("CFBundleURLTypes");
        PlistElementDict itemDict;

        itemDict = urlTypes.AddDict();
        itemDict.SetString("CFBundleTypeRole","Editor");
        itemDict.SetString("CFBundleURLName", "xxxx");
        PlistElementArray schemesArray1 = itemDict.CreateArray("CFBundleURLSchemes");
        schemesArray1.AddString("xxxx");

        itemDict = urlTypes.AddDict();
        itemDict.SetString("CFBundleTypeRole", "Editor");
        PlistElementArray schemesArray2 = itemDict.CreateArray("CFBundleURLSchemes");
        schemesArray2.AddString("xxxx");

        itemDict = urlTypes.AddDict();
        itemDict.SetString("CFBundleTypeRole", "Editor");
        itemDict.SetString("CFBundleURLName", "xxxx");
        PlistElementArray schemesArray3 = itemDict.CreateArray("CFBundleURLSchemes");
        schemesArray3.AddString("xxxx");

        File.WriteAllText(plistPath, plist.WriteToString());
        //< array >		//这里是Xcode工程中urlSchemes的源码
        //    < dict >
        //        < key > CFBundleTypeRole </ key >
        //        < string > Editor </ string >
        //        < key > CFBundleURLName </ key >
        //        < string > XXXX </ string >
        //        < key > CFBundleURLSchemes </ key >
        //        < array >
        //        < string > XXXX </ string >
        //        </ array >
        //     </ dict >
        //    < dict >
        //        < key > CFBundleTypeRole </ key >
        //        < string > Editor </ string >
        //        < key > CFBundleURLSchemes </ key >
        //        < array >
        //            < string > XXXX </ string >
        //        </ array >
        //    </ dict >
        //    < dict >
        //        < key > CFBundleTypeRole </ key >
        //        < string > Editor </ string >
        //        < key > CFBundleURLName </ key >
        //        < string > XXXX </ string >
        //        < key > CFBundleURLSchemes </ key >
        //        < array >
        //            < string > XXXX </ string >
        //        </ array >
        //    </ dict >
        //  </ array >";
        //3、修改代码
        //读取UnityAppController.mm文件
        UnityEditor.XCodeEditor.XClass UnityAppController = new UnityEditor.XCodeEditor.XClass(path + "/Classes/UnityAppController.mm");
        //在指定代码后面增加一行代码
        UnityAppController.WriteBelow("#include \"PluginBase/AppDelegateListener.h\"", "\n#import <XXXX.h>");
        //google登录
        string adInitCds = "    //google登录\n    XXXX你的代码XXXX ";
        UnityAppController.WriteBelow("AppController_SendNotificationWithArg(kUnityOnOpenURL, notifData);\n", adInitCds);
        //-(void)application:(UIApplication*)application didFinishLaunchingWithOptions:(nullable NSDictionary*)launchOptions
        string adfaceInitCds = "    //Facebook 登录\n    XXXX你的代码XXXX ";
        UnityAppController.WriteBelow("[KeyboardDelegate Initialize];\n", adfaceInitCds);
        
        string adfacebookInitCds = "    //Facebook 登录\n    XXXX你的代码XXXX";
        UnityAppController.WriteBelow("_didResignActive = false;\n", adfacebookInitCds);
    }

这里是XcodeAPI设置URLSchemes的代码,我上边的代码就是仿造这个写的!


还有一点就是引用第三方的库没有试验,有机会再学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值