Ios Xcode 配置多种scheme完美使用

前言

这里说到scheme其实配置不难,但真正应用到大项目中会发现一个神奇的问题,调试的时候自己自定义的scheme变量值都是nil,即使配置好也那样,主要场景就是工程内的其他工程,所以你的配置其实是要应用到所有子工程下的,是不是瞬间压力山大,,,,,本文最后就讲讲结合pod后轻松解决的办法,开头还是由浅入深,这样受众多点,文章也不至于太单调,就从配置开始一路讲到调试使用。

配置 Configurations

这一步主要是创建我们的编译配置项,比如添加备机,测试环境的调试和发布项,下面是添加了测试环境
在这里插入图片描述
这里环境分离时最好也是分DebugRelease,我添加了SchemeAppTest_DebugSchemeAppTest_Release相当于测试环境下的DebugRelease还有每次创建新的一定要基于DebugRelease不然出现啥配置不对真的是会排查到疯!

配置 Preprocessor Macros

在这里插入图片描述
有了配置项,现在需要添加预编译宏,这样我们的代码里就可以用它来判断我们正在编译的是哪个环境了。
上图我分别对SchemeAppTest_DebugSchemeAppTest_Release配置了SCHEMETESTDEBUG=2SCHEMETESTRELEASE=3,内部其实写什么都可以只不过用的时候就要用你写的哪个宏,这里的写法只是效仿系统,完全可以把SchemeAppTest_Debug定为ABC=1000,也没问题,只不过用的时候就如下就可以了,ABC就代表了SchemeAppTest_Debug

#ifdef ABC
#else
#endif

配置 Scheme

首先要创建scheme这里我创建的SchemeApp-Test就是测试环境用的

在这里插入图片描述
在这里插入图片描述
添加完成就需要配置对应的Configurations,我们是基于原项目创建的,所以简单改下就可以。

在这里插入图片描述

在这里插入图片描述
其实常用的就只有Run,配置一下就基本满足大部分需求,做完这些再把当前的scheme设置成shared就算是完整的配置完了scheme

在这里插入图片描述
在这里插入图片描述

使用

看样子好像一切都已经完美搞定剩下的就是使用了,其实正题才刚刚开始。。。。
首先是最常用的用法就是直接使用宏来框自己代码,这个上面其实已经有提到,这里只是写个正式点的如下,定义了BaseHost不同情况下的url

#ifdef SCHEMETESTDEBUG
#define BaseHost @"http://xxx.xxx.xxx/test"
#define CanUseCustomHost YES
#elif SCHEMETESTRELEASE
#define BaseHost @"http://xxx.xxx.xxx/test"
#define CanUseCustomHost NO
#else
#define BaseHost @"http://xxx.xxx.xxx"
#define CanUseCustomHost NO
#endif

还可以配置不同AppIconLaunchImage对应不同环境如下图

在这里插入图片描述
另外User-Defined-Setting也是还算常用的一个配置,如下图添加了一个APPCustomName,这个用的时候写成$(APPCustomName)

在这里插入图片描述
在这里插入图片描述
即可,这样配合Build Settings也可以把Bundle Identifier用这种方法做环境分离打出不同环境的包,这样不同环境的包就可以在手机上并存了。

调试

重头戏现在才开始,上边的搞完,就能打包看效果了,但是一旦你的项目里包含了其他项目或用了pod,瞬间你就会发现调试的时候NSLog输出变量都在断点的话则什么都没有!如图,这是pod方式用AF,到AF里打断点外部传的变量都是nil。。。。

在这里插入图片描述
在这里插入图片描述
直接引用一个工程项目也会有此情况,当然你要引用的是第三方库没法调试就不用考虑了,这里原因其实很简单,看下图

在这里插入图片描述
你需要确保所有引进来的工程Optimization Level这个属性想要支持调试必须是'None[-O0]',和Debug一样的设计,其次如果组件化的设计,你的预编译宏的值也要在你Module的工程里有设置,换句话说现在引进来的其他工程你的预编译宏在他们里面是没有生效的!

在这里插入图片描述
所以你还需要把每个工程里都设置一遍Optimization LevePreprocessor Macros,手动设置就不说了,还有这里如果真的应用到大型项目里很可能要设置的不止2个配置,这里只是举了最容易发现的两个问题,同理解决即可。如果用pod,我们所希望的当然是pod update完就帮我们设置好!

下面就放一波代码,以当前情况为例

target 'SchemeApp' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for SchemeApp
  pod 'AFNetworking'
  target 'SchemeAppUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

post_install do |installer_representation|
    
    installer_representation.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            #去警告
            config.build_settings['GCC_WARN_INHIBIT_ALL_WARNINGS'] = 'YES'
            #判断scheme
            if config.name.include?("SchemeAppTest_Release")
                #添加scheme对应的预编译宏
                config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
                config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'SCHEMEAPPTESTRELEASE=3'
            end
            if config.name.include?("SchemeAppTest_Debug")
                config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
                config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'SCHEMEAPPTESTDEBUG=2'
                #指定scheme的调试模式可见变量
                config.build_settings['GCC_OPTIMIZATION_LEVEL'] = '0'
                #某些情况由于编译器不支持无法debug(可选)
                config.build_settings['ONLY_ACTIVE_ARCH'] = 'YES'
            end
         end
    end    
end

利用好podfile文件,就这样一次性解决,把所有pod都配置了一遍Build Settings的设置,至此scheme才算完美搞完,利用上面的思路,即使项目再神奇应该也能做到完美的配置scheme

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在iOS使用Xcode进行离线打包,需要遵循以下步骤: 1. 确保你已经安装了Xcode并拥有一个有效的开发者账号。 2. 打开Xcode并选择 "File" -> "New" -> "Project"。 3. 选择 "iOS" -> "Application" -> "Single View App",并点击 "Next"。 4. 输入项目名称和其他信息,然后点击 "Next"。 5. 选择一个位置来保存你的项目文件,然后点击 "Create"。 6. 在左侧导航栏中选择你的项目,并在 "General" 选项卡下找到 "Identity" 部分。 7. 点击 "Team" 下拉菜单并选择你的开发者账号。 8. 关闭Xcode并在终端中打开你的项目文件夹。 9. 运行以下命令来创建一个离线打包的IPA文件: ``` xcodebuild clean archive -scheme <YourSchemeName> -archivePath <YourArchivePath.xcarchive> CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO ``` 其中,`<YourSchemeName>` 是你项目中的 scheme 名称,`<YourArchivePath.xcarchive>` 是你想要保存的归档文件的路径。 10. 运行以下命令来导出IPA文件: ``` xcodebuild -exportArchive -archivePath <YourArchivePath.xcarchive> -exportOptionsPlist <YourExportOptions.plist> -exportPath <YourIPAPath.ipa> ``` 其中,`<YourArchivePath.xcarchive>` 是你刚才创建的归档文件的路径,`<YourExportOptions.plist>` 是一个导出选项的配置文件,`<YourIPAPath.ipa>` 是你想要保存的IPA文件的路径。 11. 完成后,你应该可以在 `<YourIPAPath.ipa>` 路径下找到你的IPA文件。 请注意,此方法需要你已经有一个有效的开发者账号,并且你需要使用终端来执行命令。此外,此方法可能存在不稳定性和错误,因此请谨慎使用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值