为iOS4.3和iOS5.0构建问题

时间:2011-10-15 13:29:50

标签: iphone objective-c ios xcode ios5

我遇到了一些问题,试图将一些特定于iOS5的库整合到一个针对iOS5和iOS4.3的应用中。我已经完成了以下步骤:

  • 通过在“链接二进制文件库”中将其设置为可选项来弱化链接Twitter框架

  • 将其作为其他链接器标志中的iOS5.0 SDK的框架添加到`-framework Twitter.framework'

  • 有条件地将类框架中的框架链接起来:

    #if defined(__IPHONE_5_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0
    #import <Twitter/Twitter.h>
    #import <Accounts/Accounts.h>
    #endif
    
  • 然后在方法本身,我正在检查用户是否为Twitter设置:

    if ([TWTweetComposeViewController class]) {
        self.canTweet = [TWTweetComposeViewController canSendTweet];
    }
    

这在5.0和4.3模拟器上都能很好地工作。但是,我在运行或存档实际设备方面遇到了问题。

当我有一个运行5.0的3GS或者附加的4运行5.0时,两者都会在Scheme下拉列表中出现两次。选择最上面的一个,并尝试构建或运行项目失败,并显示Use of unidentified identifier 'TWTweetComposeViewController'错误。

使用第二个设备条目,构建失败并显示ld: framework not found Twitter.framework错误。

我确信这里有一些我不知道的东西,但我很难过。有人可以建议吗?

4 个答案:

答案 0 :(得分:3)

如果您使用的是一周链接,则必须先检查API的首次使用情况 NSClassFromString,respondsToSelector,instancesRespondToSelector等。 所以,改变你的if条件。首先尝试使用上面指定的运行时函数来获取类对象 这是一个链接,详细解释了如何做到这一点。 link

答案 1 :(得分:2)

用于呈现Twitter控制器的代码

在此之前,您必须将框架添加为可选项,并在iOS为最小iOS 5时在h文件中导入

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];
                }
            } 

答案 2 :(得分:0)

进一步挖掘编译器抛出的错误表明它忽略了弱链接标志。虽然我不知道如何或为什么,但它是通过重新安装XCode来解决的。

答案 3 :(得分:-2)

如果链接到4.2或更高版本并部署到3.1或更高版本,则可以使用新的弱链接功能来简化此检查。

你必须将Twitter框架添加为可选,然后

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];
     }
}