Unity 导出Xcode 自动添加framework

Unity 导出Xcode 自动添加framework
//打包完成后调用的方法
...
[PostProcessBuild(1)]
public static void AfterBuild(BuildTarget target, string pathToBuiltProject)
{
if (target == BuildTarget.iOS)
{
BuildIOS(target, pathToBuiltProject);
}
}

private static void BuildIOS(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 = "";
var mainTargetGUID = "";
//#if UNITY_2019_3_OR_NEWER
targetGUID = proj.GetUnityFrameworkTargetGuid();
mainTargetGUID = proj.GetUnityMainTargetGuid();
//#else
targetGUID = proj.TargetGuidByName("Unity-iPhone");
mainTargetGUID = targetGUID;
//#endif
AddBuildProperty(proj, targetGUID, mainTargetGUID);
AddOtherBuildFramework(proj, targetGUID, mainTargetGUID);
proj.WriteToFile(projPath);
// 修改Info.plist文件
string plistPath = Path.Combine(pathToBuiltProject, "Info.plist");
PlistDocument plist = new PlistDocument();
plist.ReadFromFile(plistPath);
// 添加微信信息
var weixinArray = plist.root.CreateArray("LSApplicationQueriesSchemes");
weixinArray.AddString("weixin");
weixinArray.AddString("weixinULAPI");
weixinArray.AddString("weixinURLParamsAPI");
//<key>ITSAppUsesNonExemptEncryption</key><false/>
plist.root.SetBoolean("ITSAppUsesNonExemptEncryption", false);
// 设置获取IDFA弹窗文案
plist.root.SetString("NSUserTrackingUsageDescription", "为给您更精准的提供个性化内容,请您允许我们获取广告信息");
var skArray = plist.root.CreateArray("SKAdNetworkItems");
var itemDic = skArray.AddDict();
itemDic.SetString("SKAdNetworkIdentifier", "238da6jt44.skadnetwork");
var urlType = plist.root.CreateArray("CFBundleURLTypes");
// 添加微信 APPID
var urlTypeDic = urlType.AddDict();
urlTypeDic.SetString("CFBundleTypeRole", "Editor");
urlTypeDic.SetString("CFBundleURLName", "weixin");
var urlTypeDicArray = urlTypeDic.CreateArray("CFBundleURLSchemes");
LoadConfig();
urlTypeDicArray.AddString(projectID.m_wxAppID);
plist.WriteToFile(plistPath);
}

// 添加Framework
private static void AddBuildProperty(PBXProject proj, string targetGUID, string mainTargetGUID)
{
proj.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-ObjC");
proj.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-force_load");
proj.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "$(PROJECT_DIR)/UnityFramework/ABUAdCsjAdapter.framework/ABUAdCsjAdapter");
proj.AddBuildProperty(targetGUID, "OTHER_LDFLAGS", "-Ic++abi");
proj.SetBuildProperty(targetGUID, "ENABLE_BITCODE", "NO");
proj.SetBuildProperty(targetGUID, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES");
proj.SetBuildProperty(mainTargetGUID, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES");
// 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, "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, "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, "Metal.framework", false);
proj.AddFrameworkToProject(targetGUID, "CoreLocation.framework", false);
proj.AddFrameworkToProject(targetGUID, "ImageIO.framework", false);
proj.AddFrameworkToProject(targetGUID, "AdSupport.framework", false);
proj.AddFrameworkToProject(targetGUID, "AppTrackingTransparency.framework", false);
proj.AddFrameworkToProject(targetGUID, "DeviceCheck.framework", false);
proj.AddFrameworkToProject(targetGUID, "CoreImage.framework", false);
proj.AddFrameworkToProject(mainTargetGUID, "UnityFramework.framework", false);
}

private static void AddOtherBuildFramework(PBXProject proj, string targetGUID,string mainTargetGUID)
{
proj.AddFrameworkToProject(targetGUID, "libsqlite3.tbd", 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, "libil2cpp.a", false);
proj.AddFrameworkToProject(targetGUID, "libiPhone-lib.a", false);
proj.AddFrameworkToProject(targetGUID, "libiconv.2.dylib", false);
proj.AddFrameworkToProject(targetGUID, "libresolv.9.tbd", false);
proj.AddFrameworkToProject(targetGUID, "libc++.tbd", false);
proj.AddFrameworkToProject(targetGUID, "libz.tbd", false);
proj.AddFrameworkToProject(targetGUID, "libbz2.tbd", false);
proj.AddFrameworkToProject(targetGUID, "libxml2.tbd", false);
}

// 添加关联域
static void AddAssociatedDomains()
{
var projPath = PBXProject.GetPBXProjectPath(path);
var proj = new PBXProject();
proj.ReadFromFile(projPath);
//var manager = new ProjectCapabilityManager(projPath, "Entitlements.entitlements", null, proj.GetUnityMainTargetGuid());
var manager = new ProjectCapabilityManager(
projPath,
"Entitlements.entitlements",
targetGuid: proj.GetUnityMainTargetGuid()
);
string universal = projectID.Universal_Links.Replace("https://", "applink:");
string[] str = { universal.Substring(0,universal.Length-1) };
manager.AddAssociatedDomains(str);
manager.WriteToFile();
}
...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容