Разбор для iOS: ошибки при попытке запустить приложение
Я работал с Parse SDK,и я следовал руководству quickstep. Когда я пытаюсь запустить, я получаю эти 8 ошибок. Есть идеи, почему? Похоже, что-то связано с частью разбора Facebook, которую я не использую.
Undefined symbols for architecture armv7:
"_FBTokenInformationTokenKey", referenced from:
-[PFFacebookTokenCachingStrategy accessToken] in Parse(PFFacebookTokenCachingStrategy.o)
-[PFFacebookTokenCachingStrategy setAccessToken:] in Parse(PFFacebookTokenCachingStrategy.o)
"_FBTokenInformationExpirationDateKey", referenced from:
-[PFFacebookTokenCachingStrategy cacheTokenInformation:] in Parse(PFFacebookTokenCachingStrategy.o)
-[PFFacebookTokenCachingStrategy expirationDate] in Parse(PFFacebookTokenCachingStrategy.o)
-[PFFacebookTokenCachingStrategy setExpirationDate:] in Parse(PFFacebookTokenCachingStrategy.o)
"_OBJC_METACLASS_$_FBSessionTokenCachingStrategy", referenced from:
_OBJC_METACLASS_$_PFFacebookTokenCachingStrategy in Parse(PFFacebookTokenCachingStrategy.o)
"_OBJC_CLASS_$_FBSessionTokenCachingStrategy", referenced from:
_OBJC_CLASS_$_PFFacebookTokenCachingStrategy in Parse(PFFacebookTokenCachingStrategy.o)
"_FBTokenInformationUserFBIDKey", referenced from:
-[PFFacebookTokenCachingStrategy facebookId] in Parse(PFFacebookTokenCachingStrategy.o)
-[PFFacebookTokenCachingStrategy setFacebookId:] in Parse(PFFacebookTokenCachingStrategy.o)
"_OBJC_CLASS_$_FBRequest", referenced from:
objc-class-ref in Parse(PFFacebookAuthenticationProvider.o)
"_OBJC_CLASS_$_FBSession", referenced from:
objc-class-ref in Parse(PFFacebookAuthenticationProvider.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
16 ответов:
Это какая - то ошибка, связанная с выпуском Parse iOS 1.1.33, поскольку несколько человек видят одни и те же ошибки-включая меня.
есть несколько обходных путей-
Если вы не используете библиотеку, для которой требуется флаг компоновщика-ObjC, вы можете удалить-ObjC из своего проекта:
настройки сборки > другие флаги компоновщика > удалить-ObjC
или если вы используете библиотеку, которая требует флаг, вы можете добавить Facebook SDK для.
оба варианта устранения ошибки. Надеюсь, они исправят это, так как у меня нет необходимости в Facebook SDK в моем приложении.
следуйте за обсуждением здесь:
вот потенциально более простой обходной путь, чем загрузка, компиляция и установка комплекта FB, который является большим и громоздким. Обратите внимание, что, конечно же, вы не сможете использовать какую-либо функциональность типа FB в Parse, и вы столкнетесь с серьезными проблемами, если вы запустите любой из кода синтаксического анализа, который ожидает использовать эти фиктивные символы. Но, если вы будете держаться подальше от них, вы будете в порядке, я думаю. Так...
создать объект в приложении под названием FBMissingSymbols
удалить .h вам это не понадобится
положите это в поле .м :
NSString *FBTokenInformationExpirationDateKey = @""; NSString *FBTokenInformationTokenKey = @""; NSString *FBTokenInformationUserFBIDKey = @""; @interface FBAppCall:NSObject @end @implementation FBAppCall @end @interface FBRequest:NSObject @end @implementation FBRequest @end @interface FBSession:NSObject @end @implementation FBSession @end @interface FBSessionTokenCaching:NSObject @end @implementation FBSessionTokenCaching @end @interface FBSessionTokenCachingStrategy:NSObject @end @implementation FBSessionTokenCachingStrategy @end
вы должны удалить старые
ParseFacebookUtils.framework
и сохранить новыйParseFacebookUtilsV4.framework
чтобы заставить его работать.
Мне понравился ответ dbquarrel, но он больше не работает, потому что ему не хватает некоторых новых социальных классов.
Так что сделайте то же самое, но вместо этого добавьте это:
NSString *FBTokenInformationExpirationDateKey = @""; NSString *FBTokenInformationTokenKey = @""; NSString *FBTokenInformationUserFBIDKey = @""; NSString *SLServiceTypeTwitter = @""; NSString *ACAccountTypeIdentifierTwitter = @""; @interface FBAppCall:NSObject @end @implementation FBAppCall @end @interface FBRequest:NSObject @end @implementation FBRequest @end @interface FBSession:NSObject @end @implementation FBSession @end @interface FBSessionTokenCaching:NSObject @end @implementation FBSessionTokenCaching @end @interface FBSessionTokenCachingStrategy:NSObject @end @implementation FBSessionTokenCachingStrategy @end @interface ACAccountStore:NSObject @end @implementation ACAccountStore @end @interface SLRequest:NSObject @end @implementation SLRequest @end @interface SLComposeViewController:NSObject @end @implementation SLComposeViewController @end
проверьте и убедитесь, что у вас нет двух версий фреймворка "ParseFacebookUtils" добавлено:
ParseFacebookUtilsV4 и И login
Как только я удалил ParseFacebookUtils и сохранил ParseFacebookUtilsV4, он работал нормально.
мое решение определенно будет работать, и вы можете использовать-ObjC в других флагах компоновщика.
- Добавить "Социальные.рамки", " учетная запись.рамки"
- Добавить "FacebookSDK.рамки"
Ура....теперь это работает..... и нет необходимости в удалении-ObjC.
дополнение к ответу от @blueHula . Parse удалил Facebook SDK из своей структуры, что означает, что из какой-то определенной версии (возможно, 1.1.33) интегрируется parse.рамки должны быть в сопровождении интеграции ФБ пакет SDK самостоятельно.
пожалуйста, обратитесь к этой ссылке использование parse ios sdk без включения Facebook sdk
ключевым моментом является использование
-force_load $(SRCROOT)/path/libname.a
для связи с необходимыми сторонними библиотеками, а не с помощью-all_load
и-ObjC
Это ошибка компоновщика... Вы не включаете необходимую структуру в свой проект, на которую вы ссылаетесь в одном из включенных файлов заголовков.
Так, например, если у вас есть include в вашем коде:
#import <Parse/Parse.h>
это, вероятно, требует поддержки структуры, и вы должны включить его в свое приложение. Вы включили
parse.framework
изнутри Xcode?
У меня было такое же использование, и единственной третьей стороной, которую я имел, был PayPal SDK. После удаления-ObjC все построено нормально. (всегда делайте резервную копию вашего проекта перед изменением настроек)
Это 2015 год, и у меня просто была такая же ошибка. К сожалению, ни один из ответов не работал для меня. Но это произошло:
Target > Build Phases > Link Binary With Libraries затем добавьте libstdc++.6.dylib нужна
Это решило проблему для меня.
есть много фреймворков, которые должны установить флаг-ObjC как другой связанный флаг, тогда как Parse не позволяет вам продолжить, если вы это сделаете. Чтобы справиться с этим, вы можете сделать одну из следующих вещей. Я показал пример Google Maps SDK, который нуждается в флаге-ObjC, но из-за разбора в том же проекте я не могу использовать его напрямую:
Решение 1-использование флага force_load
вместо установки флага-ObjC в качестве другого связанного флага, используйте флаг force_load для загрузки конкретный фреймворк или библиотека.
-force_load $(SRCROOT)/GoogleMaps.framework/Versions/A/GoogleMaps
решение 2-Использование Facebook SDK
просто добавьте Facebook SDK в качестве отдельного фреймворка, это позволит вам использовать флаг-ObjC. Также убедитесь, что вы добавили
Accounts.framework
иSocial.framework
. Если вы добавили Болт.затем основу и при помощи Parse пустой проект, чтобы бороться с дубликатами символ удалитьBolt.framwork
. Если все еще есть несколько ошибок, то удалите учетные записи и социальные рамки и добавьте их снова (это будет так, если вы использовали синтаксический анализ пустого проекта по умолчанию).
меня беспокоит этот вопрос в течение многих дней. Я использовал cocoapods для управления всеми третьими SDK.
вот как я решил эту проблему. Перейдите в проект pod и установите для пункта "только архитектура сборки" значение нет.
перестроить проект pod, а затем ошибки ссылки исчезли! помощь это может помочь тому, кто использует cocoapods.
У меня была та же проблема. Я решил, загрузив предыдущую версию (1.1.32) отсюда:
https://parse.com/downloads/ios/parse-library/1.1.32
(в моем случае мне нужен был флаг-ObjC)
Edit: похоже, что версия не работает с 64-битными архитектурами.
Это можно удалить из файла проекта, расположенного в
<projectname>/cordova/<projectname>/platforms/ios/<projectname>.xcodeproj/project.pbxproj
инайдите в файле
-ObjC
, есть несколько мест. Выглядит это так:OTHER_LDFLAGS = ( "-weak_framework", CoreFoundation, "-weak_framework", UIKit, "-weak_framework", AVFoundation, "-weak_framework", CoreMedia, "-weak-lSystem", "-force_load", "\"$(BUILT_PRODUCTS_DIR)/libCordova.a\"", "-ObjC", );