gpt4 book ai didi

iphone - 为不同的客户定制iPhone应用程序

转载 作者:行者123 更新时间:2023-12-03 18:26:55 24 4
gpt4 key购买 nike

我有一个现有的应用程序需要针对不同的客户端进行编译

每个客户端都需要自己的图标和启动屏幕。
我还希望能够有条件地包含各种功能,具体取决于特定客户是否需要它们。

我尝试为每个客户设置不同的目标,但到目前为止运气不佳。
具有相同名称但不同路径的不同资源不断混淆。

理想情况下,我希望能够通过复制另一个类似的客户端来构建应用程序,然后只需进行最少数量的更改即可为新客户端创建应用程序。

设置此应用程序的最佳方式是什么?

最佳答案

应该为每个客户制定单独的目标。对于这些功能,我建议首先在目标设置中设置一个标识客户端的宏(在构建选项卡上的“预处理器宏”下),然后创建一个如下所示的 FeatureDefines.h 文件:

#ifdef macroClientA // assume client A wants features 1 and 3
# define macroFeature1
# define macroFeature3
#endif

// and similarly for the other clients

现在您可以使用

#import featureDefines
#ifdef macroFeature1

您需要测试功能 1 是否需要的任何地方。

对于单独的图标,您的目标设置可以为每个客户端指定不同的 info.plist 文件,而这些文件又可以为图标指定不同的文件名。

对于单独的启动屏幕,iOS 始终要求将启动屏幕命名为 Default.png,但它们可以位于项目目录的不同子目录中。您可以通过右键单击 Xcode 中显示“组和文件”的位置,选择“目标成员资格”,然后选中您要使用的复选框,并确保未选中其他复选框,来控制将哪一个用于哪个目标。

对于资源,我建议您这样命名资源文件:

resourceName.ext//如果没有特定于客户端的资源,则使用通用资源
resourceName-clientName.ext//客户端特定资源

接下来设置一个通用的资源查找器方法,如下所示:

-(NSString *) resourcePathForResourceName: (NSString *) resourceName extension: (NSString *) ext {
NSString *clientName;
#ifdef macroClientA
clientName = @"clientA";
#endif // and similarly for the other clients
NSString *clientSpecificName = [NSString stringWithFormat: @"%@-%@.%@", resourceName, clientName, ext];
NSString *genericName = [NSString stringWithFormat: @"%@.%@"];
if ([[NSFileManager defaultManager] fileExistsAtPath: clientSpecificName])
return clientSpecificName;
else if ([[NSFileManager defaultManager] fileExistsAtPath: genericName])
return genericName;
else
// handle the error
}

通过该方法运行所有资源文件抓取将允许您将特定于客户端的资源添加到项目中,而无需更改一行代码。

关于iphone - 为不同的客户定制iPhone应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4504716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com