Unity工程打包成iOS的Framework

前言

网上Unity工程打包成iOS的Framework资料相当的少,笔者也是踩了各种的坑。因Unity版本的问题还是有部分差异的,如果您遇到问题先不要急,要有耐心,慢慢尝试去解决这些问题。这是笔者写的第一篇技术博客,希望可以帮助到您,如果写的不好还请给笔者些容忍度,帮助笔者修改谢谢。

参考链接

https://juejin.im/post/5d81c8d26fb9a06b1b19f6cd

工具版本

Unity版本 2018.3.0f2rw1

Xcode版本 Version 11.4 

一、创建一个 Framework 工程

1. 没错就是选中它


2.更改Xcode一些配置


3. 删除armv7(因为我们Unity工程是64位不支持armv7)


二、创建一个Framework工程

1.新建一个Unity文件夹,文件夹和App..xcodeproj文件同一目录。加入工程 把Data Library Classes都拖进新建的工程, 把 Data 文件夹加入工程。选择Create folder refrences。把Library和Classes 加入工程选择Create groups。



2.去掉Library中的libil2cpp文件夹Remove Refreence(引用就可以,因为它在工程里编译不过,各种文件找不到)


3. 把MapFileParser.sh加入到根目录下,不用拖到项目中也就是和App..xcodeproj文件同一目录。在Buildphases中添加RunScript脚本"$PROJECT_DIR/MapFileParser.sh"


4. 在Build Settings中添加User DefineSetting 两项,添加

GCC_THUMB_SUPPORT      NO

GCC_USE_INDIRECT_FUNCTION_CALLS       NO

UNITY_RUNTIME_VERSION           2018.3.0f2rw1

UNITY_SCRIPTING_BACKEND     il2cpp

5.继续在Other Linker Flags 中添加-weak_frameworkCoreMotion -weak-lSystem (-undefineddynamic_lookup选填因为我的工程报错所以要添加__mh_execute_header)


6.Header Search Paths中添加

$(PROJECT_DIR)/Unity/Classes

$(PROJECT_DIR)/Unity/Classes/Native

$(PROJECT_DIR)/Unity/Libraries/libil2cpp/include

7. Other C Flags 添加

-DINIT_SCRIPTING_BACKEND=1 

-fno-strict-overflow

-DNET_4_0

 -DRUNTIME_IL2CPP=1

8. Prefix Header添加Unity/Classes/Prefix.pch


9. Enable Bitcode

 10. 添加系统 Framework (UnityAds.framework是来自我们unity工程里的库,不属于系统库)

三、修改Unity文件代码

1.删除引⽤DynamicLibEngineAPI-functions.h DynamicLibEngineAPI.mm(如果您工程里没有可以忽略)

2.在Classes的Unity⽂文件的DeviceSettings.mm⽂文件中 在#endif下添加return deviceUnknown;

3在UnityAppController.h修改实际测试不需要任何修改参考了网上很多教程都是要在appDelegate里增加unityController属性,然后引用appDelegate 调用属性。由于我是SDK没法引用到appDelegate,所以我选择动态的获取并执行。但是我发现我的appDelegate并没有添加unityController这个属性,程序正常运行没有任何问题,所以我在下的截图里注释相关代码并增加log输出打印,我发现它并不为nil,而且还是无限循环被调用,我认为这里不需要做任何的修改,它有值并值为UnityAppControlle,具体下面的截图


4.向编辑确定版本号和服务地址 并在Data文件下修改AppResVersionConfig.jsonconfig.json文件(不同的公司可能生成的Unity工程也不一样,如果您的工程没有这些资源文件请忽略,如果有请您设置您自己的版本和服务器地址)

5.退出游戏会切换回unity的问题修改UnityAppController+ViewHandling.mm 注释- (void)transitionToViewController:(UIViewController*)vc

6. 需要覆盖UnityAppController以防止Unity在加载资接管用程序UI并使用框架路径而不是主程序包。覆盖didFinishLaunchingWithOptions行以下更改

我们要使用这种方式调用,否则Unity初始化话会因为路径找不到而崩溃

 NSBundle* bundle = [NSBundlebundleForClass:[self class]];

 UnityInitApplicationNoGraphics([[bundle bundlePath] UTF8String]);

 也就是说我们的路径打印出来应该是这样的

/var/containers/Bundle/Application/32ECEDB3-A0C3-4AD7-9C2C-B437D70F1C0B/UnityTestDemo.app/Frameworks/UnityFramework.framework

framework运行会崩il2cpp::vm::MetadataCache::Initialize()所以我们要使用上面截图的路径

7.修改Unity资源文件Filesystem.mm 路径,路径不对会造成找不到资源文件卡死。正确路径

dir= AllocCString([NSBundle bundleForClass:NSClassFromString(@"UnityAppController")].bundlePath);

dir = AllocCString([[NSBundle mainBundle].bundlePathstringByAppendingString:@"/Frameworks/UnityFramework.framework"]);

否则会因加载不出资源卡死


8. FullScreenVideoPlayer.mm 文件方法 这里也要修改路径原因和6、7一样不在多说

四、加入几个预先写好的类主要是用来调用Unity中界面类(类链接地址:https://github.com/FateOfKing/unity-export-ios-framework/tree/master/u3d-ios-framework

我自己是参考链接的里的类简单的封装了Manager方法自己调用



五、Demo集成UnityFramework

1.添加Framework

2. 添加copy file parse


3.删除armv7和关闭BitCode(原因不多解释,因Framework不支持

4.main.m文件 man函数修改

5. AppDelegate调用

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

推荐阅读更多精彩内容