Я хочу использовать инфраструктуру Twitter для iOS 5, но иметь возможность запускать свое приложение в более старой ОС.Как получить доступ к слабым связанным фреймворкам в iOS?
Я добавил слабую ссылочную структуру (т. Е. Установил «необязательный» флаг) в настройках Xcode 4.2 Target. Базовый SDK - это iOS 5, iOS-развертывание. Цель - iOS 3.2.
Далее, я пытаюсь использовать щебетать рамки:
#import <Twitter/Twitter.h>
...
Class twClass = NSClassFromString(@"TWTweetComposeViewController");
if (!twClass) // Framework not available, older iOS
{
[self shareWithTwitterPriorIOS5];
return;
}
if ([TWTweetComposeViewController canSendTweet]) // Check if twitter is setup and reachable
{
TWTweetComposeViewController* twc = [[TWTweetComposeViewController alloc] init];
// [twc addURL:[NSURL URLWithString:@"http://mail.ru"]];
// [twc addImage:[UIImage imageNamed:@"Some image.png"]]
[twc setInitialText:textToShare];
[viewController presentViewController:twc animated:YES completion:^{
// Optional
}];
[twc release];
// Assume twc is ARC released or call [twc release];
}
else
{
// Twitter account not configured, inform the user
}
Он хорошо работает на IOS 5 тренажере. Как только я попытаюсь использовать симулятор или реальное устройство со старой версией ОС, я получаю сообщение об ошибке «Twitter/Twitter.h», который не найден (во время компиляции). Если я удалю директиву «#import», я получаю пару ошибок, которые не найден. Класс TWTweetComposeViewController не найден.
Если я прокомментирую весь код, связанный с Twitter, я получаю ошибку компоновщика: «ld: framework not found Twitter». Команда Ld вызвала ошибку:
Ld /Users/mikhailkeskinov/Library/Developer/Xcode/DerivedData/Dictionary-eiyrziajmltuglfzgtnjxffkojwi/Build/Products/Debug-iphoneos/Dictionary.app/Dictionary normal armv6
cd /Developer/WorkShop/XDictionary/trunk
setenv IPHONEOS_DEPLOYMENT_TARGET 3.2
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.2.sdk -L/Users/mikhailkeskinov/Library/Developer/Xcode/DerivedData/Dictionary-eiyrziajmltuglfzgtnjxffkojwi/Build/Products/Debug-iphoneos "-L/Developer/WorkShop/XDictionary/trunk/Dictionary/Twitter+OAuth/Libraries & Headers" -F/Users/mikhailkeskinov/Library/Developer/Xcode/DerivedData/Dictionary-eiyrziajmltuglfzgtnjxffkojwi/Build/Products/Debug-iphoneos -filelist /Users/mikhailkeskinov/Library/Developer/Xcode/DerivedData/Dictionary-eiyrziajmltuglfzgtnjxffkojwi/Build/Intermediates/Dictionary.build/Debug-iphoneos/Dictionary.build/Objects-normal/armv6/Dictionary.LinkFileList -dead_strip -miphoneos-version-min=3.2 -lxml2 -framework AVFoundation -framework UIKit -framework Foundation -framework CoreGraphics -lOAuth -weak_framework Twitter -o /Users/mikhailkeskinov/Library/Developer/Xcode/DerivedData/Dictionary-eiyrziajmltuglfzgtnjxffkojwi/Build/Products/Debug-iphoneos/Dictionary.app/Dictionary
Что здесь не так?
Да, ты спас меня от своей судьбы! В моем случае не было никакой разницы между двумя элементами в редакторе схем, но переключение делало трюк. Возможно, это вызвало это, установив более старый SDK для iOS в новый Xcode. Документирование/совместное использование собственного ответа всегда хорошо. Благодарю. –
Apple исправила эту проблему в XCode 4.3. Ответ выше для XCODE v. 4.2 –