ADAL iOS с CocoaPods v0.38 с использованием Swift без заголовка моста

Я создаю приложение Swift, которое подключается к Office365 с помощью ADAL. Несколько месяцев назад в Podfile у меня была эта единственная строка:

pod 'ADALiOS', '~> 1.0.1'

и все работало нормально, когда я определил заголовок моста, который включал:

#import "ADALiOS/ADAuthenticationContext.h"

Наконец, в моем коде Swift все, что мне нужно, это добавить

import ADALiOS

Но я также хотел начать использовать SwiftyJSON, который является фреймворком Swift, поэтому я добавил пару строк в свой подфайл:

pod 'ADALiOS', '~> 1.2.4'
pod 'SwiftyJSON'
use_frameworks!

Обновление до CocoaPods V0.38 позволило использовать фреймворки с библиотеками Objective-C (ADALiOS). Согласно документации, заголовок Bridging больше не нужен, поэтому я его удалил.

Теперь все компилируется нормально, но когда я вызываю код ADAL, происходит сбой со следующей ошибкой:

ADALiOS [2015-08-09 13:01:07 - C621BB01-686A-4064-9455-A4B55C11E0E8] 
ERROR: Error raised: 18. Additional Information: 
Domain: ADAuthenticationErrorDomain 
ProtocolCode:(null)
Details:The required resource bundle could not be loaded. Please read the ADALiOS readme on how to build your application with ADAL provided authentication UI resources.. 
ErrorCode: 18.

Я предполагаю, что, поскольку он компилируется/связывается нормально, это связано не с заголовком моста, а с чем-то другим.

Любая подсказка?


person pierrebo    schedule 09.08.2015    source источник


Ответы (4)


Попробуйте перетащить SwiftyJSON Framework в свой проект. Не используйте CocoPods, а загрузите zip-файл, затем разархивируйте и перетащите файлы swift внутрь вашего проекта. Таким образом, нет необходимости добавлять use_frameworks в ваш PodFile, и все должно работать нормально. (Я уже сделал это с другой библиотекой, и это сработало)

person kholl    schedule 09.08.2015
comment
Да, это может быть обходной путь, но я надеялся продолжить использовать Cocoapods для управления зависимостями. - person pierrebo; 10.08.2015

Я наконец исправил эту проблему. На случай, если кто-то еще получит тот же «тип» ошибки, это то, что я сделал.

Я начал новый проект с нуля и установил ADALiOS с помощью CocoaPod, без использования use_framework! и вручную добавил в проект библиотеку libADALiSO.a, а также заголовок-мост с #import "ADAuthenticationContext.h". Я даже использовал более старую версию ADALiOS (V1.0.2). При попытке запустить этот проект (который должен был сработать) я получил странные предупреждения о том, что у меня есть дублированные функции в некоторых скрытых папках, используемых Xcode:

~/Library/developer/xcode/DerivedData
~/Library/developer/xcode/CoreSimulator/Device

В любом случае заработало, так как для ру программы потребовался один из дубликатов. Затем я просто удалил папки/файлы с названием моего проекта и пересобрал программу. Предупреждения исчезли, и все снова заработало.

Затем я включил в свой подфайл нужный PromiseKit и use_frameworks, пересобрал приложение, и оно снова заработало. Я удалил заголовок моста, который не требуется, а только добавил следующую строку в свой быстрый код:

import ADALiOS

и он все еще работал, как и предполагалось в первую очередь.

Наконец, я открыл исходный проект со всем своим кодом, и он также собрался и запустился без каких-либо ошибок. Поэтому я потратил добрых 3 часа, чтобы повторить все с нуля, думая, что виновниками были Cocoapods V0.38 или ADALiOS, чтобы, наконец, обнаружить, что это, вероятно, просто что-то в Xcode.

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

person pierrebo    schedule 10.08.2015

Согласно репозиторию ADAL GitHub, это должно быть исправлено в ADAL 2.1.

person pierrebo    schedule 17.02.2016

Если вы используете модули с проектом Objective-C. Тогда используйте версию модуля 2.5.1, так как это последняя доступная версия. Но, к сожалению, эта версия нигде не упоминается, в сообщениях и блогах помощи по-прежнему отображается версия 2.2, которая выдает ошибку компилятора.

Но если вы использовали версию 2.2 на начальном этапе, не беспокойтесь, просто «обновите» свой проект, а затем снова откройте соответствующее рабочее пространство. Это заставит ваш код скомпилироваться без ошибок.

person prasad nikumbh    schedule 15.09.2017