美文网首页
20211226链接与symbol 多环境配置

20211226链接与symbol 多环境配置

作者: 奶牛的奶糖 | 来源:发表于2022-03-25 18:28 被阅读0次

    多环境配置的3种方式

    • Project:包含了项目所有的代码,资源文件,所有信息。 workspace是多个project的合集
    • Target:对指定代码和资源文件的具体构建方式。
    • Scheme:对指定Target的环境配置。
    ② 多target

    targets - 右键 - duplicate 就会新建一个target

    target duplicate.png
    选择新的target,同时需要修改bundleid, info.plist文件及其所对应的bundle setting配置info.plist file 对应的文件名,如下
    info.plist文件配置.png
    如何使用?
    OC下: buildsetting - preprocessor macros
    OC宏定义.png
    Swift 下:other swift flags , 变量前需要添加-D, 比如-DEV
    swift 添加宏定义.png

    平时使用的宏定义DEBUG状态其实就是此处定义的DEBUG, 所以也可自己定义一个如DEV, 那么使用的时候直接使用这个DEV宏,在这个target下才会使用。

    #if DEV
    #import <LoginApp_Dev-Swift.h>
    #else
    #import <LoginApp-Swift.h>
    #endif
    
    

    缺点: 配置复杂 target 、build setting、 info.plist等多个地方配置

    ③scheme

    在project里面配置configurations


    configurations配置.png

    添加之后可以看到scheme里面 build configurations里面就多了一个配置


    image.png
    添加scheme
    image.png
    image.png

    然后将scheme 和 configurations 一一对应。
    使用:一般生产环境和测试环境不一样,会对应不同的域名, 之前都是一个pch文件定义一个besturl, testurl进行切换, 那么显示使用不同scheme就可实现。
    ①、在build setting - user defined 自定义一个HOST_URL ,不同版本设置不同的url


    自定义HOST_URL.png
    ②在info.plist文件里面添加HOST_URL键值对
    info.plist添加键值对.png

    ③ 那么就可以从info.plist里面获取url的值了

        NSString *path = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
        NSDictionary *infodic = [[NSDictionary alloc] initWithContentsOfFile:path];
        NSLog(@"utl - %@", infodic[@"HOST_URL"]);
    //不同版本输出不同结果不同
    2021-12-15 15:30:04.018123+0800 LoginApp[29754:4261661] utl - www.baidu.com
    2021-12-15 15:42:47.007850+0800 LoginApp[29795:4274616] utl - https:127.0.0.2
    

    方法3 配置XConfig文件

    1.command + n ,选择Configuration settings file, 分别设置2个xcconfig文件,Config-Debug.xcconfig和Config-Release.xcconfig文件。
    2.然后2个config配置文件分别对应project


    image.png xcconfig配置.png

    3.配置xcconfig文件内容:
    比如分别设置URL_HOSTT,Config-Debug.xcconfig设置为URL_HOSTT = 127.0.0.1, Config-Release.xcconfig设置为URL_HOSTT = 127.0.0.3


    image.png

    4.设置info.plist文件参数,使用中括号{}


    info.plist文件配置关键字.png
    5.通过读取info.plist配置文件读取信息
        NSString *path = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
        NSDictionary *infodic = [[NSDictionary alloc] initWithContentsOfFile:path];
        NSLog(@"utl - %@", infodic[@"URL_HOSTT"]);
    //输出结果
    2021-12-26 12:39:20.166389+0800 LoginApp[58381:4219508] utl - 127.0.0.3
    

    xcconfig文件配置build setting缩写xcodebuildsettings.com xcodebuildsettings.com 或 build setting右键 xcode help

    xcconfig文件冲突

    当有了cocopods文件,需要添加第三方库的时候可直接在Podfile文件里编辑 pod 'xxx',然后直接在终端当前文件目录下, 执行pod install命令。


    cocopods和自己xcconfig文件冲突.png
    • 当我们使用cocopos的同时也配置了自己的xcconfig文件,那么就会导致cocopos时冲突,那么在自己的xcconfig文件里面使用#include关键字导入cocopods的xcconfig文件即可。
      xcconfig导入cocopodss的config文件.png

    当自己的xcconfig文件与cocopods里的配置关键字重复了,使用$(inherited) 关键字继承

    在xcconfig中使用//时会变成注释, 那么可以定义一个变量,比如:

    定义1个变量
    A = /
    HOST_URL = http:${A}/127.0.0.1
    
    //为OTHER_ LDFLAGS添加添加2个条件: Debug iphonesimulator* x86_ 64,在此条件下才会编译生效
    OTHER_ LDFLAGS[ config=Debug][ sdk=iphonesimulator*][ arch=x86_ 64]=- framework "Cat"
    

    修改当前编译环境:


    image.png image.png

    mach-o文件与xcode编译环境配置

    Mach-O(Mach Object)是macOS、iOS、iPadOS存储程序和库的文件格式。对应系统通过应用二进制接口(application binary interface,缩写为(ABI)来运行该格式的文件。
    Mach-O格式用来替代BSD系统的a.out格式。Mach-O文 件格式保存了在编译过程和链接过程中产生的机器代码和数据,从而为静态链接和动态链接的代码提供了单一文件格式。
    查看macho文件

    • 使用命令 objdump --macho --private-headers + 目标文件目录
    Macintosh:~ johnson$ objdump --macho --private-headers /Users/johnson/Library/Developer/Xcode/DerivedData/LoginApp-bfvfmvvpqamjuuhdlkfhamgnnjqy/Build/Products/Debug-iphonesimulator/LoginApp.app/LoginApp
    
    • 使用machoview.app


      image.png

    Macho文件内容.png

    macho是可读可写,在ios上运行必须要签名的

    应用启动过程其实就是链接过程

    全局符号和本地符号

    相关文章

      网友评论

          本文标题:20211226链接与symbol 多环境配置

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