如何使用适用于iOS 4.3的iOS 5.0方法构建应用程序?
我正在为我的应用完成iCloud功能,但无法解决一个问题: 由于我使用了一些新的5.0功能,如NSFileCoordinator,因为“dyld:找不到符号: _OBJC_CLASS _ $ _ NSFileCoordinator”。 如何为构建4.3版本“解包”一些文件(具有iCloud方法)? 在此先感谢!如何使用适用于iOS 4.3的iOS 5.0方法构建应用程序?
我认为最好关闭4.3版本的iCloud功能。你可以在运行时检查iOS版本。在你的特定情况下,你可以检查NSFileCoordinator
类的存在与NSClassFromString()
函数,但我很确定在互联网上有更多像样的方法来完成这个。
只取出来源copilation的:
- 点击您的项目文件。
- 转到“构建阶段”。
- 展开“编译源代码”。
- 选择您不想要的文件,然后按部分底部的 处的“ - ”按钮。
或者您可以从项目中删除它(只是删除引用而不是删除文件),它也会将其从本节中删除。
或者你可以创建预处理宏来检查用户是否可以运行功能
// System Versioning Preprocessor Macros
#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
/* Usage
if (SYSTEM_VERSION_LESS_THAN(@"4.0")) {
...
}
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"3.1.1")) {
...
}*/
有了这个,你可以检查用户使用什么SYSTEN版本,并且仅建立5.0,但如果它是一个小于5.0的版本,可以使用代码。
你可以做一个新的建设目标,并设置一个编译预处理宏象NO_CLOUD然后用
#ifdef NO_CLOUD ... code here ...#else ... cloud code here ... #endif
你必须薄弱环节的framwork的(当你添加一个框架,以项目只需将其设置为可选不需要)。
在H文件你必须输入唯一的,如果你有iOS 5的
#if defined(__IPHONE_5_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0
#import <Twitter/Twitter.h>
#import <Accounts/Accounts.h>
#endif
和你必须尝试从字符串和测试创建类,看看你是否有一流的M档。同时测试顶部看看班级是否对选择器做出反应。
Class TWTweetComposeViewControllerClass = NSClassFromString(@"TWTweetComposeViewController");
if (TWTweetComposeViewControllerClass != nil) {
if([TWTweetComposeViewControllerClass respondsToSelector:@selector(canSendTweet)]) {
UIViewController *twitterViewController = [[TWTweetComposeViewControllerClass alloc] init];
[twitterViewController performSelector:@selector(setInitialText:)
withObject:NSLocalizedString(@"TwitterMessage", @"")];
[twitterViewController performSelector:@selector(addURL:)
withObject:url];
[twitterViewController performSelector:@selector(addImage:)
withObject:[UIImage imageNamed:@"yourImage.png"]];
[self.navigationController presentModalViewController:twitterViewController animated:YES];
[twitterViewController release];
}
} else {
//do something else
}
我的例子是基于twitter引擎,你必须适应你的类。
使用最新的SDK(5.0)进行构建。它会既囤4.3和5.0
而且你可以检查IOS版本
if ([[UIDevice currentDevice] systemVersion] floatValue] >= 5.0f) {
// iCloud
} else {
// iCloudless
}
感谢所有答复。但这就是我需要:) – 2012-02-14 08:46:48