Анализ для iOS: ошибки при попытке запустить приложение

Я работаю с Parse SDK, и я следовал за быстрым руководством. Когда я пытаюсь запустить, я получаю эти 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)

Ответ 1

Это некоторая ошибка, связанная с выпуском Parse iOS 1.1.33, поскольку многие люди видят одни и те же ошибки - я включил себя.

Существует несколько способов обхода -

Если вы не используете библиотеку, для которой требуется флаг компоновщика -ObjC, вы можете удалить -ObjC из своего проекта:

Настройки сборки > Другие флаги компоновщикa > удалить -ObjC

или если вы используете библиотеку, для которой требуется этот флаг, вы можете добавить SDK для Facebook.

Оба варианта устраняют ошибки. Надеюсь, они исправит это, поскольку мне не нужно использовать SDK для Facebook в моем приложении.

Следуйте дискуссиям здесь:

https://parse.com/questions/cocoapods-incompatibility

Ответ 2

Здесь возможно более простое обходное решение, чем загрузка, компиляция и установка набора FB, который является довольно большим и громоздким. Обратите внимание: конечно, вы не сможете использовать любую функциональность типа FB в Parse, и вы столкнетесь с серьезными проблемами, если вы инициируете любой из кода Parse, который ожидает использования этих фиктивных символов. Но, если вы держитесь подальше от них, вы будете в порядке, я думаю. Так что...

  • Создайте объект в своем приложении под названием FBMissingSymbols

  • Удалить .h вам это не понадобится

  • Поместите это в .m:

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

Ответ 3

Вам нужно удалить старый ParseFacebookUtils.framework и сохранить новый ParseFacebookUtilsV4.framework, чтобы он работал.

Ответ 4

Мне понравился ответ 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

Ответ 5

Проверьте и убедитесь, что у вас нет двух версий фреймворка ParseFacebookUtils:

ParseFacebookUtilsV4 а также ParseFacebookUtils

Как только я удалил ParseFacebookUtils и сохранил ParseFacebookUtilsV4, он работал нормально.

Ответ 6

Мое решение определенно будет работать, и вы можете использовать -ObjC в других флагах компоновщика.

  • Добавить "Social.framework", "Account.framework"
  • Добавить "FacebookSDK.framework"

Приветствует.... теперь он работает..... и нет необходимости удалять -ObjC.

Ответ 7

Похоже, вам может понадобиться добавить "Accounts.Framework" и/или "Social.Framework".

Ответ 8

Дополнительный ответ от @blueHula. Parse удалил SDK Facebook из своей структуры, что означает, что из некоторой определенной версии (возможно, 1.1.33) интеграция parse.framework должна сопровождаться независимым интегрированием FB SDK.

Пожалуйста, обратитесь к этой ссылке используя синтаксический анализ ios sdk, не включая футляр sdk.

Ключевым моментом является использование -force_load $(SRCROOT)/path/libname.a для связи с необходимыми сторонними библиотеками вместо использования -all_load и -ObjC

Ответ 9

Это ошибка компоновщика... Вы не включаете в свой проект нужный фреймворк, в который вы ссылаетесь, в одном из них есть заголовочные файлы.

Итак, например, если у вас есть код в вашем коде:

#import <Parse/Parse.h>

Вероятно, для этого требуется поддерживающая среда, и вы должны включить ее в свое приложение. Вы включили parse.framework из Xcode?

Xcode Frameworks

Ответ 10

У меня было такое же использование, и единственной третьей стороной, которой я был, был SDK PayPal. После удаления -ObjC все построено отлично. (всегда делайте резервную копию проекта перед изменением настроек)

Ответ 11

это 2015 год, и у меня была такая же ошибка. К сожалению, ни один из вышеперечисленных ответов не работал у меня. Но это произошло:

Цель > Сборка фаз > Ссылка на двоичные файлы с библиотеками , затем добавьте libstdС++. 6.dylib

Это решило проблему для меня.

Ответ 12

Существует много фреймворков, которым необходимо установить флаг ObjC как другой связанный флаг, тогда как Parse не позволяет вам действовать, если вы это сделаете. Чтобы справиться с этим, вы можете сделать одно из следующих действий. Я показал пример SDK Google Maps, для которого необходим флаг ObjC, но из-за Parse в том же проекте я не могу использовать его напрямую:

Решение 1 - Использование force_load Flag

Вместо того, чтобы установить флаг OOjC как другой связанный флаг, используйте флаг force_load для загрузки определенной структуры или библиотеки.

-force_load $(SRCROOT)/GoogleMaps.framework/Versions/A/GoogleMaps

Решение 2 - Использование Facebook SDK

Просто добавьте Facebook SDK как отдельную структуру, это позволит вам использовать флаг -ObjC. Также убедитесь, что вы добавили Accounts.framework и Social.framework. Если вы добавили Bolt.framework и использовали пустой проект Parse, то для устранения дубликата символа удалите Bolt.framwork. Если все еще есть несколько ошибок, удалите учетную запись и социальную структуру и добавьте ее снова (это будет так, если вы использовали пустой проект по умолчанию).

Ответ 13

Я беспокоился об этой проблеме в течение многих дней. Я использовал cocoapods для управления всем третьим SDK.

Вот как я решил эту проблему. Перейдите в проект pod и установите для элемента "только архитектура построения" значение НЕТ.

Восстановить проект pod, а затем ссылки на ошибки исчезли! помогите, это поможет кому-то, кто использует cocoapods. enter image description here

Ответ 14

У меня была та же проблема. Я решил, загрузив предыдущую версию (1.1.32) отсюда:

https://parse.com/downloads/ios/parse-library/1.1.32

(В моем случае мне нужен флаг -ObjC)

Изменить: похоже, что версия не работает с 64-битными архитектурами.

Ответ 15

Это можно удалить из файла проекта, расположенного в   <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",
);

Ответ 16

Установите cocoaPods и добавьте это в свой подфайл:

pod 'Facebook-iOS-SDK'
pod 'Parse'
pod 'ParseFacebookUtils'