完整项目包装成framework 1

2020-09-15  本文已影响0人  山已几孑

完整项目准备迁移mPaaS,计划是把整个项目导入到mPaaS工程中,仅使用一个Launcher,后期在分批量的,拆分成microApp和H5包,百度说,项目需要编译成.framework或者.a库后导入主项目中,这里也跟随这个思路往下走。

坑1

不然运行过程中会报错找不到文件,形态库用不了,或者Xib无法加载之类的

//使用了未定义的类,
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_xx文件名", referenced from:...

上千个.m的绑定target,要命!
几个办法:

  1. 顺着项目找,一个一个改
  2. Xcode - find - regular expression 使用正则匹配([a-zA-Z]*)(\.m), 不过问题是实际匹配的是注释里面的XXX.m,如果没有注释或者注释是错的,就没法子了
  3. 着重介绍第三种,直接修改project.pbxproj,上面需要的资源文件都可以通过这种方式进行添加
    分几步:
    • 第一步肯定是打开project.pbxproj了
    • 找到/* End PBXProject section */行,在他上面有下面样式的代码,SubProjectOutlet,就是我们的framwork的target,项目的target
    targets = (
                EF1D01D1250B21F500F5F0FB /* SubProject */,
                EF1D01EC250B21F600F5F0FB /* SubProjectUITests */,
                EF1D02BD250B514A00F5F0FB /* SubProjectOutlet */, 我是framwork的target
            );
        EF1D02BD250B514A00F5F0FB /* SubProjectOutlet */ = {
            isa = PBXNativeTarget;
            buildConfigurationList = EF1D02C9250B514A00F5F0FB /* Build configuration list for PBXNativeTarget "SubProjectOutlet" */;
            buildPhases = (
                EF1D02B9250B514A00F5F0FB /* Headers */,
                EF1D02BA250B514A00F5F0FB /* Sources */,
                EF1D02BB250B514A00F5F0FB /* Frameworks */,
                EF1D02BC250B514A00F5F0FB /* Resources */,
            );
            。。。
        };
/* End PBXNativeTarget section */
/* Begin PBXSourcesBuildPhase section */
        EF1D01CE250B21F500F5F0FB /* Sources */ = { // 项目的引用
            isa = PBXSourcesBuildPhase;
            buildActionMask = 2147483647;
            files = (
                EF1D022F250B223500F5F0FB /* UIImage+MultiFormat.m in Sources */,
                EF1D022B250B223500F5F0FB /* UIImageView+HighlightedWebCache.m in Sources */,
                EF1D022C250B223500F5F0FB /* FLAnimatedImageView+WebCache.m in Sources */,
                EF1D01DD250B21F500F5F0FB /* PBViewController.m in Sources */,
                ... // 这里就省略了若干个
            );
            runOnlyForDeploymentPostprocessing = 0;
        };
        。
        。
        。                
        EF1D02BA250B514A00F5F0FB /* Sources */ = {
            isa = PBXSourcesBuildPhase;
            buildActionMask = 2147483647;
            files = (
                EF1D02D1250B518E00F5F0FB /* PBViewController.m in Sources */,
                EFFE3EA72510567C00BFBE50 /* PBNextViewController.m in Sources */,
            );
            runOnlyForDeploymentPostprocessing = 0;
        };
/* End PBXSourcesBuildPhase section */

后面的Link Binary and Libraries 、 Copy bundle resources 都可以用这种方法解决。

PS: 绑定完成之后运行项目,可能会有如下的问题,

dyld: Library not loaded: @rpath/XXX.framework/XXX
Referenced from:XXX
Reason: image not found

此时,到framwork-General,下图位置,为对应的库,添加签名。


设置Embedded
上一篇 下一篇

猜你喜欢

热点阅读