Разбор для 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 80

16 ответов:

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

есть несколько обходных путей-

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

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

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

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

следуйте за обсуждением здесь:

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

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

  1. создать объект в приложении под названием FBMissingSymbols

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

  3. положите это в поле .м :

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 в других флагах компоновщика.

  1. Добавить "Социальные.рамки", " учетная запись.рамки"
  2. Добавить "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?

Xcode Frameworks

У меня было такое же использование, и единственной третьей стороной, которую я имел, был 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.enter image description here

У меня была та же проблема. Я решил, загрузив предыдущую версию (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",
);

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

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