美文网首页
iOS 项目依赖子模块工程

iOS 项目依赖子模块工程

作者: 光之盐汽水 | 来源:发表于2019-06-14 10:25 被阅读0次

    上一节我们讲了项目结构优化中的《项目嵌套子工程》,接下来我们继续学习项目结构优化系列之项目依赖子模块工程。
    在开发中,我们会遇到这样一种情况:公司有很多app,而这些app中会用到一些公用的功能模块,比如说登录。这时,我们可以单独创建这些子模块然后关联进项目中。

    1、创建workspace、项目工程、模块动态库
    我们首先创建workspace来进行项目和模块的管理。命名为Projects。
    接着我们分别创建两个项目工程,学生端和教师端。命名为StudentProject和TeacherProject。
    然后创建这两个项目工程都需要用到的子功能模块——登录模块动态库。命名为LoginLib。
    项目工程和动态库的建立都需要关联进Projects里面。如下图所示:

    项目模块关联设置
    2、在子功能模块中添加功能文件、资源文件等
    在LoginLib动态库中添加功能代码,以供项目工程调用。
    这里为了方便,我们直接把上一节的登录代码拷贝一份。
    动态库功能文件结构
    如图所示:登录模块LoginLib中我们添加了登录、注册、忘记密码等类,并且添加了Image.bundle以及LoginPrefixHeader.pch文件。
    其中:
    image.bundle用于存放图片等资源。具体image.bundle怎么创建,可以查看我的上篇文章《项目嵌套子工程》
    PCH文件用于宏定义一些常量方法等。因为我们使用的是动态库,要想要找到动态库中的文件,必须要先找到动态库所在的bundle才可以。
    具体PCH文件如何创建使用,参考我的另一篇文章《iOS PCH文件的添加和使用》
    因此,我们可以在pch文件中定义该动态库所在的bundle以及资源文件所在的相对路径。
    #ifndef LoginPrefixHeader_pch
    #define LoginPrefixHeader_pch
    
    // Include any system framework and library headers here that should be included in all compilation units.
    // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
    
    // 该动态库的bundle
    #define loginBundle [NSBundle bundleWithIdentifier:@"com.fifedu.LoginLib"]
    
    // 该动态库里面图片的路径
    #define imagePath(imgName) [[loginBundle resourcePath] stringByAppendingPathComponent:[@"image.bundle" stringByAppendingPathComponent:imgName]]
    
    
    #endif /* LoginPrefixHeader_pch */
    

    当加载动态库中的xib文件的时候,需要在init方法中生命xib文件所在的bundle,否则会找不到。

    - (instancetype)init {
        self = [super initWithNibName:@"FiFLoginController" bundle:loginBundle];
        if (self) {
            return self;
        }
        return self;
    }
    

    图片等资源文件同理:

    // 可以查看PCH文件中的宏定义
    self.imgView.image = [UIImage imageWithContentsOfFile:imagePath(@"否认三连.jpg")];
    

    3、动态库的相关设置
    TARGETS -Build Settings - Build Active Architchture Only 设置为No
    TARGETS->Build Settings->Other Linker Flags,添加 -ObjC
    TARGETS->Build Settings->Enable Bitcode 设置为No
    Edit scheme-Run-Build Configuration设置为Release

    设置 Build Configuration
    设置公开头文件和资源文件:
    设置公开头文件和资源文件
    并且在LoginLib.h文件中加入需要公开的头文件
    在LoginLib.h文件中加入需要公开的头文件
    4、项目工程集成并调用动态库
    targets——General——embedded Binaries,添加动态库。
    添加动态库
    enable Bitcode设为no。(如果动态库没有设置为No的话,这儿也可以不设置,具体情况具体分析)

    完成!!!

    相关文章

      网友评论

          本文标题:iOS 项目依赖子模块工程

          本文链接:https://www.haomeiwen.com/subject/iwnyfctx.html