最佳实践:创建免费版和付费版时如何处理iOS App的代码差异?

2023-12-24

我想在 App Store 上发布我的 iOS 应用程序的两个版本。

一种是付费的,另一种是免费的。 到目前为止,我的付费应用程序代码已经完成。 现在我想为免费应用程序的 iAd 和 InAppPurchase 添加更多代码。

维护这两个版本的最佳方法是什么? 我正在考虑复制 Xcode 项目或在我的 git 存储库中创建一个分支。


如果您分支或复制项目,您将在以后为自己制造维护噩梦。

在同一个项目中创建单独的目标,具体差异可以通过代码中的#ifdef块来处理。向每个目标添加定义以指定您正在构建付费版本还是免费版本。

==添加==

要定义每个目标符号,请转到目标的构建设置,向下滚动直到找到 Apple LLVM 5.1 - 预处理块,更改特定于目标的设置以添加所需的符号(例如,FREE_BUILD=1 或 PAID_BUILD=1)

要添加目标特定代码,您可以在代码中使用该定义的符号,如下所示:

// some code here
#if FREE_BUILD
    // Some code that only gets compiled for the free target here
#elif PAID_BUILD
    // Some code that only gets compiled for the paid target here
#else
    // Just in case because I'm a paranoid sob
    #error Must define FREE_BUILD or PAID_BUILD
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最佳实践:创建免费版和付费版时如何处理iOS App的代码差异? 的相关文章

  • 为什么 Git 无法将文件更改与修改后的父级/主控合并?

    我有一个文件 里面只有一行 我创建一个分支并向同一文件添加第二行 保存并提交到分支 我切换回主人 并向文件中添加不同的第二行 保存并提交给master 现在总共有 3 条独特的线路 如果我现在尝试将分支合并回主分支 则会遇到合并冲突 为什么
  • 带有 Core Data 对象的动态 UITableView 高度

    过去几天我一直在试图解决一个谜团 即为什么我的批处理大小为 20 的 NSFetchedResultsController 总是在获取完成后立即错误 即加载到内存中 我的所有对象 从而导致请求需要约 20 秒 事实证明 这是因为在我的 he
  • 图像目录中矢量 pdf 的渲染模式设置为模板,但 UIImageView 不会在自定义单元格中对图像进行着色

    我已将所有图像文件迁移到资产目录中 它们都是大小为 1x 的 pdf 向量 它们被设置为呈现为模板 它们的大小和颜色在任何地方都表现得很好 但是有一个来自 xib 的自定义 TableView Cell 我有 6 个 UIImageView
  • 无法将 admob 与 firebase iOS/Android 项目链接

    我有两个帐户 A 和 B A 是在 Firebase 上托管 iOS Android unity 手机游戏的主帐户 B 用于将 admob 集成到 iOS Android 手机游戏中 我在尝试将 admob 分析链接到 Firebase 项
  • Swift 3:如何去除UITableView屏幕截图的灰色区域

    我在从桌面视图的屏幕截图中删除灰色区域时遇到了问题 这是我尝试截图时的输出UITableView 实际上我隐藏了一些tableViewCell这是不需要的 可能这就是区域显示灰色的原因 任何帮助表示赞赏 非常感谢 Answer 我通过使用
  • iOS 11 安全区域布局指南向后兼容性

    启用安全区域布局指南是否与 iOS 11 以下版本兼容 我设法使用新的安全区域布局指南并保持与 iOS 9 和 iOS 10 的向后兼容性 编辑 正如 NickEntin 的评论所指出的 此实现将假定存在状态栏 但在 iPhone X 的横
  • Objective Flickr 照片上传错误

    我正在使用 ObjectiveFlickr 库将照片从我的 iPhone 应用程序上传到 Flickr 我可以授权该应用程序并执行一般请求 但在尝试上传照片时遇到错误 要上传的照片是使用 AVFoundation 捕获的图像 这是相关代码
  • UISearchController 保留问题

    我正在尝试使用 UISearchController 但是我遇到了无法解决的保留问题 MainTableview 有两个部分 第1节 基于某些正则表达式过滤数据 第2节 All Data 我将 UISearchController 添加到我
  • 使用 gitignore 嵌套存储库。

    我想嵌套 2 个 git 存储库 我一直在阅读子模块 有一段时间我认为它很棒 我想我可能想要其他东西 这是我的情况 首先 我想我应该提到我的所有服务器都托管网站 并以 staging domain com 和 domain com 实时 模
  • 无法使用 Xamarin 和 WCF 访问 Web 服务

    我想使用 Xamarin 和 WCF 来使用公共 Web 服务 对于这个演示 我将使用Xamarin iOS 这是我试图使用的 公共 网络服务 http www webservicex net globalweather asmx WSDL
  • 为什么我的 tableView 函数运行了 3 次?

    我有一个 UITableView 并且有执行它所需的方法之一 func tableView tableView UITableView numberOfRowsInSection section Int gt Int println sec
  • 如何使用 Swift 获取 YouTube 频道的所有播放列表?

    我的问题不是关于从一般频道检索视频 我只想获取该频道创建的所有 播放列表 并检索每个播放列表的缩略图 标题和视频数量 这是一个 YouTube 频道示例 正如您所看到的 有很多已创建的播放列表 截至目前 我只能获取某个频道最新上传的视频 在
  • 对使用phonegap和钛的质疑[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 最近我听说了 PhoneGap 和 Titanium 移动网络应用程序的开发 我分析了这两个 Web 应用程序 并了解了如何使用它们以
  • git 是否有任何静态接口?

    我一直在寻找一个宁静的 git api 但似乎没有找到 我得到的最接近的是 Github 的 api 来访问一些存储库信息 还有其他的实施吗 Orion Git API http wiki eclipse org Orion Server
  • 如何更改已上传的 Firebase 存储图像文件名?

    我需要更改已上传到 firebase 存储中的文件名 因为 在 firebase 存储中上传图像后 我将 url 保存在 firebase 数据库中的特定子 文件夹 下 但是 当我将图像移动到另一个子 文件夹 时 我需要根据新名称更改存储中
  • 自定义 MKAnnotationView - 如何捕获触摸而不忽略标注?

    我有一个自定义 MKAnnotationView 子类 它完全按照我想要的方式显示视图 在那个视图中 我有一个按钮 我想捕获按钮上的事件来执行操作 这很好用 但是 我不希望标注被忽略或消失 基本上 触摸标注中的按钮将开始播放声音 但我想保留
  • iOS App Store ExecutionEngineException 尝试 JIT 编译

    我有一个非常尴尬的问题 我已经为 iOS 构建了我的应用程序 并在所有模拟器上对其进行了测试 并且运行良好 我已将其安装在设备 iPhone 6 plus 上 效果也很好 然而 当我将其提交到应用商店时 反馈是它在所有设备上启动时都会崩溃
  • NSPredicate 的 onFormat 字符串

    我想用 id 键对数据进行排序 我如何理解格式字符串的用途NSPredicate格式 我有一个100号的帖子 我的代码 let objectIDs posts map 0 id let predicate NSPredicate forma
  • 显示键盘时如何在 TextView 下方添加更多填充

    当我在 ScrollView 中有 TextField 并点击它时 键盘会按预期显示 但似乎 TextField 已向上移动到足以显示输入区域 但我希望移动到足够的位置 以便整体可见 否则它看起来像是被剪裁了的 我找不到改变这种行为的方法
  • 在 UIMenuItem 上设置accessibilityLabel

    我正在尝试设置accessibilityLabel of a UIMenuItem而且似乎没有效果 无论如何 VoiceOver 只是读取项目的标题 let foo UIMenuItem title foo action selector

随机推荐

  • 动态字段上的 jQuery x-editable 插件?

    我制作了一个脚本 可以在单击按钮时添加动态输入 并使用相应的 x 按钮删除不需要的输入 我的需要是添加x 可编辑每个新创建的动态输入上的插件 我正在使用 x editable 以这种方式 在 x editable 弹出窗口中选择的选项上 右
  • Python odbc;如何查找odbc中的所有表

    有什么方法可以通过 odbc 连接获取所有可用表的列表 我必须从一路生成的表中获取数据 因此我事先不知道名称 在回答此问题时未指定 ODBC 驱动程序 From PyODBC 文档 http code google com p pyodbc
  • 如何在 Visual Basic 6 (vb6) 中使用 TLS 1.2 - REST

    APIGee https apigee com api management 正在将请求迁移到 TLS 1 2 操作系统 Windows Server 2003 我有一个用 vb6 开发的旧应用程序 但由于这次新迁移 它停止工作 这是我的代
  • 速度模板和 JavaScript

    我尝试将 javascript 添加到我的速度模板中 table tr td Name td td currency CurrencyName td tr tr td Jual td td div currency Buy div td t
  • openstacksdk如何更改当前用户密码

    我找到了CLI or API请求方法 它们对我有用 如下所示 source etc kolla admin openrc sh openstack user password set password newpsw original pas
  • 我如何使用 python 请求登录 instagram?

    你好 我正在尝试使用 python requests 库登录 Instagram 但是当我尝试时 Instagram 将我变成了 错误请求 有谁知道我该如何解决这个问题 我寻找解决这个问题的方法 但没有找到任何东西 请帮忙 谢谢 它正在工作
  • 错误:RenderBox 未布局,断言失败:第 1940 行 pos 12:“hasSize”

    我无法修复这个错误 RenderBox 未布局 RenderPointerListener 2b92a relayoutBoundary up9 需要绘制需要合成位更新 package flutter src rendering box d
  • 如何从单个父进程创建两个进程

    我知道我需要使用 fork 但这只会创建一个子进程 我是否只是从子进程中再次调用 fork 另外 我需要它们通过信号或管道进行通信 这更容易实现 并且我需要知道什么才能做到这一点 函数等 要创建第二个进程 请调用fork 再次 无论是在父级
  • Google Auth 在 Blazor 中获取访问令牌时出错

    我目前有一个带有 Blazor WASM 的 ASP Net Core Web Api 它可以使用组件 RemoteAuthenticatorView 成功登录 Google OAuth 我现在的目的是将我拥有的令牌传递给 Web api
  • 生成范围 (1,n) 但不在列表 (i,j) 中的数字

    如何生成在范围内的随机数 1 n 但不在某个列表中 i j 示例 范围是 1 500 列表是 1 3 4 45 199 212 344 注意 列表可能未排序 拒绝抽样 http en wikipedia org wiki Rejection
  • 使用 tslint 时如何忽略 *.d.ts 文件?

    我想将 tslint 添加到我的工作流程中 我通过以下方式安装它 npm install tslint tslint config ms recommended save dev And my tslint json好像 extends t
  • 如何序列化ArrayList中的对象?

    我想序列化一个数组列表Item但它不起作用 my Item类扩展Stuff类并有一些子类 我的所有类都实现了可序列化 我有这部分 try Serialize data object to a file ObjectOutputStream
  • Lua:获取网页

    我想获取一个网页并以字符串形式获取结果 但我不知道该怎么做 我在网上搜索并没有找到如何操作 我只想用Lua套接字 http w3 impa br diego software luasocket其中带有一个http子模块 http w3 i
  • 与 sklearn.neighbors.NearestNeighbors 的输出混淆

    这是代码 from sklearn neighbors import NearestNeighbors import numpy as np X np array 1 1 2 1 3 2 1 1 2 1 3 2 nbrs NearestNe
  • 如何安装CodeRush和Resharper? CodeRush 快捷方式丢失

    我正在尝试同时安装 CodeRush 和 ReSharper 安装 ReSharper 后 我的 CodeRush 快捷方式消失了 有谁知道如何在安装了 Resharper 的情况下恢复我的 CodeRush 短裤 这是我当前的设置 1 V
  • 当用户单击输入密码时,如何使用系统内置密码屏幕来验证我的应用程序

    我正在将 TouchID 集成到我的应用程序中 如何使用 输入密码 选项显示系统内置密码屏幕来验证我的应用程序 请任何人解释一下如何处理 Objective C 中的 LAErrorUserFallback 情况 你不能这样做 您可以做的是
  • Lambda 表达式无法工作,被终止

    使用 lambda 表达式编写 java 8 程序 它没有被执行 而是在 lambda 表达式处终止 没有例外 import java util ArrayList import java util List import java uti
  • 将一个或多个系数设置为特定整数

    我正在使用标准 lm 模型 并且希望将一个或多个变量的系数设置为特定整数 例如 我希望天气和价格变量的系数分别为 647 和 15 我正在使用带有标准公式的 lm 函数 到目前为止我发现的最接近的东西是glm中的offset函数 或者sys
  • Angular2路由器可以激活,带参数吗?

    我已经看到了关于这个具体问题的一些问题 我最近只从事 Angular2 项目 无论如何 我现在遇到了一个问题 在已弃用的路由器中 我在路由的数据部分添加了我的用户角色 我覆盖了 routerOutlet 以便我可以在激活路由之前检查此值 目
  • 最佳实践:创建免费版和付费版时如何处理iOS App的代码差异?

    我想在 App Store 上发布我的 iOS 应用程序的两个版本 一种是付费的 另一种是免费的 到目前为止 我的付费应用程序代码已经完成 现在我想为免费应用程序的 iAd 和 InAppPurchase 添加更多代码 维护这两个版本的最佳