Unity配置Xcode脚本

29 篇文章 0 订阅
1 篇文章 0 订阅

Unity制作IPA安装包时,由于项目的需要,接入第三方的SDK,需要导入不同的第三方库,如果每次都手动导入比较浪费时间,而且有可能出错的风险,这里制作一个脚本,通过Unity提供的方法OnPostprocessBuild(在Build时会调用)。

大致思路:在生成的配置文件中,写入自己需要库或者配置

话不多说,代码走起来,在代码中加入注释,如果不懂的可以留言,大家相互学习一下。

#if UNITY_IOS
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using UnityEditor;
using System.IO;

namespace GoldenDungeon {
public class XcodeSettingsPostProcesser {
    [PostProcessBuildAttribute(0)]
    public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) {
        if (target != BuildTarget.iOS) {
            return;
        }
        string projectPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj";
        PBXProject pbxProject = new PBXProject();
        pbxProject.ReadFromFile(projectPath);
        //设置安装包的名字
        string targetGuid = pbxProject.TargetGuidByName("Unity-iPhone");
        //在Other Linker Flags 添加 -ObjC
        pbxProject.AddBuildProperty(targetGuid,"OTHER_LDFLAGS","-ObjC");
        //设置Enable Bitcode 为No
        pbxProject.SetBuildProperty(targetGuid,"ENABLE_BITCODE","No");
        //添加.framework库
        pbxProject.AddFrameworkToProject(targetGuid,"Security.framework",false);
        pbxProject.AddFrameworkToProject(targetGuid,"CoreGraphics.framework",false);
        pbxProject.AddFrameworkToProject(targetGuid,"WebKit.framework",false);
        pbxProject.AddFrameworkToProject(targetGuid,"CoreTelephony.framework",true);
        
        pbxProject.AddFileToBuild(targetGuid, pbxProject.AddFile("usr/lib/libsqlite3.0.tbd", "Frameworks/libsqlite3.0.tbd", PBXSourceTree.Sdk));
        pbxProject.AddFileToBuild(targetGuid, pbxProject.AddFile("usr/lib/libz.tbd", "Frameworks/libz.tbd", PBXSourceTree.Sdk));
        pbxProject.AddFileToBuild(targetGuid, pbxProject.AddFile("usr/lib/libc++.tbd", "Frameworks/libc++.tbd", PBXSourceTree.Sdk));
        //写入文件,如果不写入不会生效的
        File.WriteAllText(projectPath,pbxProject.WriteToString());
        //为plist写入项目中需要的配置 一般项目中接入微信会需要
        string plistPath = System.IO.Path.Combine(pathToBuiltProject, "Info.plist");
        PlistDocument plist = new PlistDocument();
        plist.ReadFromFile(plistPath);
        PlistElementDict dict = plist.root.CreateDict("NSAppTransportSecurity");
        dict.SetBoolean("NSAllowsArbitraryLoads", true);
        //iOS跳转需要配置
        PlistElementArray array = plist.root.CreateArray ("LSApplicationQueriesSchemes");
        array.AddString("weixinULAPI");
        array.AddString("weixin");
        
        PlistElementArray urlTypes = plist.root.CreateArray("CFBundleURLTypes");
        dict = urlTypes.AddDict();
        dict.SetString("CFBundleURLName", "weixin");
        PlistElementArray schemes = dict.CreateArray("CFBundleURLSchemes");

        schemes.AddString("APPID");

        dict = urlTypes.AddDict();
        dict.SetString("CFBundleURLName", "pay");
        schemes = dict.CreateArray("CFBundleURLSchemes");
        schemes.AddString("xxx-xxxx");
        
        dict = urlTypes.AddDict();
        dict.SetString("CFBundleURLName", "app");
        schemes = dict.CreateArray("CFBundleURLSchemes");
        //bundleID
        schemes.AddString("com.xxx.xx.xxxxx");
        //写入plist
        plist.WriteToFile (plistPath);
    }
}
}
#endif

 

Unity3D 中,可以通过 PBXProject 类来操作 Xcode 工程。要向 Xcode 工程中添加一个需要复制的 Framework,可以按照以下步骤进行操作: 1. 在 Unity3D 中打开需要操作的 Xcode 工程。 2. 在 Unity3D 的菜单栏中选择 Assets -> Create -> C# Script,创建一个新的 C# 脚本。 3. 将下面的代码复制到 C# 脚本中: ```csharp using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; using UnityEngine; public class XcodeProjectPostProcess : MonoBehaviour { [PostProcessBuildAttribute(1)] public static void OnPostprocessBuild(BuildTarget buildTarget, string buildPath) { if (buildTarget != BuildTarget.iOS) { return; } // 获取 Xcode 工程的路径 string projPath = PBXProject.GetPBXProjectPath(buildPath); // 创建 PBXProject 对象 PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); // 获取 Unity-iPhone 主 Target 的名称 string targetName = proj.TargetGuidByName("Unity-iPhone"); // 添加需要复制的 Framework string frameworkPath = "path/to/framework.framework"; string frameworkName = "framework.framework"; string fileGuid = proj.AddFile(frameworkPath, frameworkName, PBXSourceTree.Sdk); proj.AddFileToBuild(targetName, fileGuid); // 将修改写回到 Xcode 工程 File.WriteAllText(projPath, proj.WriteToString()); } } ``` 在上述代码中,我们通过 PBXProject 类的 AddFile 和 AddFileToBuild 方法向 Xcode 工程中添加一个需要复制的 Framework,并将其添加到 Unity-iPhone 主 Target 中。 4. 保存 C# 脚本,并将其拖拽到 Unity3D 的某个 GameObject 上。 5. 在 Unity3D 中点击菜单栏的 File -> Build Settings,进入 Build Settings 界面。 6. 选择 iOS 平台,并点击 Build 按钮进行打包。 在打包完成后,Xcode 工程中会自动添加需要复制的 Framework,并在打包时将其复制到输出目录中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值