Проблемы со сборкой для iOS4.3 и iOS5.0 - PullRequest
3 голосов
/ 15 октября 2011

Я столкнулся с проблемами, пытаясь включить некоторые специфичные для 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. Однако у меня проблемы с его запуском или архивированием на реальных устройствах.

Когда у меня подключен 3GS с 5.0 или 4 с 5.0, оба появляются в раскрывающемся списке Схема дважды. Выбор верхнего и попытка построить или запустить проект завершается с ошибкой Use of unidentified identifier 'TWTweetComposeViewController'.

При использовании второй записи устройства сборка завершается с ошибкой ld: framework not found Twitter.framework.

Я уверен, что кое-что мне здесь не хватает, но я в тупике. Кто-нибудь может посоветовать?

Ответы [ 4 ]

3 голосов
/ 15 октября 2011

Если вы используете недельное связывание, вам сначала нужно проверить доступность API, используя NSClassFromString, RespondsToSelector, instancesRespondToSelector и т. Д. Итак, измените условие if. Сначала попробуйте получить объект класса, используя указанную выше функцию времени выполнения.
вот ссылка, подробно объясняющая, как это сделать. ссылка

2 голосов
/ 22 декабря 2011

Код для представления твиттер-контроллера

Перед этим вы должны добавить фреймворки как опциональные и выполнить импорт в h-файл, если iOS имеет минимальный уровень iOS 5

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];
                }
            } 
0 голосов
/ 30 марта 2012

если вы ссылаетесь на 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];
     }
} 
0 голосов
/ 18 октября 2011

Дальнейшее изучение ошибки, выдаваемой компилятором, показало, что он игнорирует флаг слабой ссылки. Хотя я понятия не имею, как и почему, это было исправлено переустановкой XCode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...