Unity打包iOS,Xcode自动打包framework

报错:

Exception: Calling TargetGuidByName with name='Unity-iPhone' is deprecated. There are two targets now, call GetUnityMainTargetGuid() - for app or GetUnityFrameworkTargetGuid() - for source/plugins to get Guid instead.
UnityEditor.iOS.Xcode.PBXProject.TargetGuidByName (System.String name) (at /Users/builduser/buildslave/unity/build/External/XcodeAPI/Xcode/PBXProject.cs:170)
ByteDance.Union.XCodePostProcess.OnPostProcessBuild (UnityEditor.BuildTarget target, System.String pathToBuiltProject) (at Assets/LightGameSDK/Scripts/iOS/Editor/XCodePostProcess.cs:33)
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <437ba245d8404784b9fbab9b439ac908>:0)
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <437ba245d8404784b9fbab9b439ac908>:0)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <437ba245d8404784b9fbab9b439ac908>:0)
UnityEditor.Build.BuildPipelineInterfaces+AttributeCallbackWrapper.OnPostprocessBuild (UnityEditor.Build.Reporting.BuildReport report) (at /Users/unity/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:177)
UnityEditor.Build.BuildPipelineInterfaces+<>c__DisplayClass17_0.<OnBuildPostProcess>b__1 (UnityEditor.Build.IPostprocessBuildWithReport bpp) (at /Users/unity/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:433)
UnityEditor.Build.BuildPipelineInterfaces.InvokeCallbackInterfacesPair[T1,T2] (System.Collections.Generic.List`1[T] oneInterfaces, System.Action`1[T] invocationOne, System.Collections.Generic.List`1[T] twoInterfaces, System.Action`1[T] invocationTwo, System.Boolean exitOnFailure) (at /Users/unity/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:391)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at /Users/unity/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:197)

原因:

有两个Guid,需要区分。

解决:

GetUnityMainTargetGuid(),用于app获取Guid;GetUnityFrameworkTargetGuid(),用于插件获取Guid。

    //var targetGUID = proj.TargetGuidByName("Unity-iPhone");
    var targetGUID = proj.GetUnityMainTargetGuid();

可用于打包后处理,修改XCode工程设置,示例:

using UnityEngine;
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using System.IO;
 
public class BuildCallback : IPreprocessBuildWithReport, IPostprocessBuildWithReport
{
    int IOrderedCallback.callbackOrder { get { return 0; } }
 
    System.DateTime startTime;
 
    //打包前事件
    void IPreprocessBuildWithReport.OnPreprocessBuild(BuildReport report)
    {
        startTime = System.DateTime.Now;
        Debug.Log("开始打包 : " + startTime);
    }
 
    //打包后事件
    void IPostprocessBuildWithReport.OnPostprocessBuild(BuildReport report)
    {
        System.TimeSpan buildTimeSpan = System.DateTime.Now - startTime;
        Debug.Log("打包成功,耗时 : " + buildTimeSpan);
    }
 
    //回调  打包后处理
    [PostProcessBuild(1)]
    public static void OnPostProcessBuild(BuildTarget target,string pathToBuiltProject)
    {
        if(target != BuildTarget.iOS)
        {
            return;
        }
 
        var projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj";
        var proj = new PBXProject();
        proj.ReadFromFile(projPath);
        //var targetGUID = proj.TargetGuidByName("Unity-iPhone");
        //var targetGUID = proj.GetUnityMainTargetGuid();
        var targetGUID = proj.GetUnityFrameworkTargetGuid();
        proj.AddBuildProperty(targetGUID,"OTHER_LDFLAGS","-ObjC");
        proj.SetBuildProperty(targetGUID,"ENABLE_BITCODE","NO");
 
        // framework to project
        proj.AddFrameworkToProject(targetGUID,"WebKit.framework",false);
        proj.AddFrameworkToProject(targetGUID,"VideoToolbox.framework",false);
        proj.AddFrameworkToProject(targetGUID,"SystemConfiguration.framework",false);
        proj.AddFrameworkToProject(targetGUID,"StoreKit.framework",false);
        proj.AddFrameworkToProject(targetGUID,"Security.framework",false);
        proj.AddFrameworkToProject(targetGUID,"ReplayKit.framework",false);
        proj.AddFrameworkToProject(targetGUID,"Photos.framework",false);
        proj.AddFrameworkToProject(targetGUID,"MultipeerConnectivity.framework",false);
        proj.AddFrameworkToProject(targetGUID,"MobileCoreServices.framework",false);
        proj.AddFrameworkToProject(targetGUID,"MetalPerformanceShaders.framework",false);
        proj.AddFrameworkToProject(targetGUID,"MediaToolbox.framework",false);
        proj.AddFrameworkToProject(targetGUID,"MediaPlayer.framework",false);
        proj.AddFrameworkToProject(targetGUID,"libresolv.9.tbd",false);
        proj.AddFrameworkToProject(targetGUID,"libiconv.tbd",false);
        proj.AddFrameworkToProject(targetGUID,"libcompression.tbd",false);
        proj.AddFrameworkToProject(targetGUID,"libc++abi.tbd",false);
        proj.AddFrameworkToProject(targetGUID,"JavaScriptCore.framework",false);
        proj.AddFrameworkToProject(targetGUID,"GLKit.framework",false);
        proj.AddFrameworkToProject(targetGUID,"CoreTelephony.framework",false);
        proj.AddFrameworkToProject(targetGUID,"AVFoundation.framework",false);
        proj.AddFrameworkToProject(targetGUID,"AudioToolbox.framework",false);
        proj.AddFrameworkToProject(targetGUID,"AssetsLibrary.framework",false);
        proj.AddFrameworkToProject(targetGUID,"Accelerate.framework",false);
        proj.AddFrameworkToProject(targetGUID,"AuthenticationServices.framework",false);
        proj.AddFrameworkToProject(targetGUID,"libil2cpp.a",false);
        proj.AddFrameworkToProject(targetGUID,"libiPhone-lib.a",false);
        proj.AddFrameworkToProject(targetGUID,"AuthenticationServices.framework",false);
        proj.AddFrameworkToProject(targetGUID,"CoreText.framework",false);
        proj.AddFrameworkToProject(targetGUID,"AVKit.framework",false);
        proj.AddFrameworkToProject(targetGUID,"CFNetwork.framework",false);
        proj.AddFrameworkToProject(targetGUID,"CoreGraphics.framework",false);
        proj.AddFrameworkToProject(targetGUID,"CoreMedia.framework",false);
        proj.AddFrameworkToProject(targetGUID,"CoreMotion.framework",false);
        proj.AddFrameworkToProject(targetGUID,"CoreVideo.framework",false);
        proj.AddFrameworkToProject(targetGUID,"Foundation.framework",false);
        proj.AddFrameworkToProject(targetGUID,"OpenAL.framework",false);
        proj.AddFrameworkToProject(targetGUID,"OpenGLES.framework",false);
        proj.AddFrameworkToProject(targetGUID,"QuartzCore.framework",false);
        proj.AddFrameworkToProject(targetGUID,"UIKit.framework",false);
        proj.AddFrameworkToProject(targetGUID,"libiconv.2.dylib",false);
        proj.AddFrameworkToProject(targetGUID,"LightGameSDK.framework",false);
        proj.AddFrameworkToProject(targetGUID,"Metal.framework",false);
        proj.AddFrameworkToProject(targetGUID,"libresolv.9.tbd",false);
        proj.AddFrameworkToProject(targetGUID,"libc++.tbd",false);
        proj.AddFrameworkToProject(targetGUID,"libz.tbd",false);
        proj.AddFrameworkToProject(targetGUID,"CoreLocation.framework",false);
        proj.AddFrameworkToProject(targetGUID,"ImageIO.framework",false);
        proj.AddFrameworkToProject(targetGUID,"AdSupport.framework",false);
 
        proj.WriteToFile(projPath);
 
        var plistPath = Path.Combine(pathToBuiltProject,"Info.plist");
        var plist = new PlistDocument();
        plist.ReadFromFile(plistPath);
        PlistElementDict rootDict = plist.root;
        plist.root.SetString("NSPhotoLibraryAddUsageDescription","需要相册权限");
        plist.root.SetString("NSPhotoLibraryUsageDescription","需要相册权限");
        plist.root.SetString("NSCalendarsUsageDescription","需要日历权限");
        plist.root.SetString("NSMicrophoneUsageDescription","录制屏幕需要麦克风权限");
        plist.root.SetString("NSCameraUsageDescription","需要相机权限");
        plist.root.SetString("NSLocationWhenInUseUsageDescription","需要定位权限");
 
        PlistElementArray queriesSchemes = rootDict.CreateArray("LSApplicationQueriesSchemes");
        queriesSchemes.AddString("douyinsharesdk");
        queriesSchemes.AddString("douyinopensdk");
        queriesSchemes.AddString("snssdk1128");
        queriesSchemes.AddString("toutiaoopensdk");
 
        plist.WriteToFile(plistPath);
 
        UnityEngine.Debug.Log("Xcode 后续处理完成");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值