ios - 如何针对不同地区和语言管理单个应用程序的 2 个版本?

标签 ios xcode git cocoa app-store

我正在美国和中国部署 iOS 应用程序。 App 的行为几乎相同,但逻辑略有不同。例如:我们使用邮箱注册账户,但在中国使用电话号码。除此之外,显然应用程序中使用的语言不同。

我们打算向美国和中国应用商店提交两个不同的应用程序,但我们遇到了这个问题:两个版本共享相当多的代码库 (95%)。话虽这么说,如果将来我们需要向应用程序添加 future ,我们必须手动迁移更改,因为我们将无法使用 git(我假设是这样,因为它们是不同的项目,对吗?)。这当然是不可取的。但到目前为止,我看不出有什么办法可以解决这个问题。

任何人都可以提供有关处理此类问题的建议吗?也许有一个 git 技巧?或者我们一开始就不应该使用两个不同的项目?如果不是,什么是更好的方法?

提前致谢。

最佳答案

根据我们的讨论,建议在同一个项目中使用 Targets,代码被重用并且可以 checkin 一个 repo。以下是我将如何在同一个项目中维护多个目标。

在 Target US Build Settings 的 Preprocessor Macros 中,添加以下内容:

TARGET='TARGET_US'

在 Target China Build Settings,Preprocessor Macros 中,添加以下内容:

TARGET='TARGET_CN'

然后在代码中,使用预处理器检查:

#define STRINGIZE(str) #str
#define STRINGIZE_MACRO(str) STRINGIZE(str)

#ifdef TARGET
    if (STRINGIZE_MACRO(TARGET)=="TARGET_US") {
        // US app logic goes here
    } else if (STRINGIZE_MACRO(TARGET)=="TARGET_CN") {
        // China app logic goes here
    }
#endif

还只是想指出,有一种方法可以将已编译的源文件与目标相关联,它可以在构建阶段中找到。您可以选择编译所需的代码文件。例如,对于 Target US,添加 main-us.m 和 USAppDelegate.m 进行编译,对于 Target China,使用 main-china.m 和 ChinaAppDelegate.m。

关于ios - 如何针对不同地区和语言管理单个应用程序的 2 个版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24582589/

相关文章:

ios - iPhone 上的 Swift 表单

iphone - EXC_CRASH(SIGABRT)无法跟踪它-请参阅崩溃日志-GADObjectPrivate.m

c++ - Xcode 不打印日志/控制台消息。显示黑色调试器

ios - Objective C - IOS - Xcode 4.6.2 - 听不到 mp3 文件的声音

ios - 在进入下一个 VC 之前 Swift 重置约束

iphone - 一致的 NSUserDefaults 保存

git checkout 裸露在接收后的子模块中

git - 如何压缩中间有 merge 提交的提交?

git - 如何在不更改当前工作目录的情况下 git 添加文件?

ios - SwiftUI 图像剪辑到边界