Как использовать SVProgressHUD как в приложении iOS, так и в его расширении

У меня есть проект приложения iOS и его общего расширения с использованием таких библиотек, как Alamofire и FileKit. Все отлично работало со следующими Podfile:

target 'myApp' do
  use_frameworks!
  pod 'BRYXBanner'
end
target 'myAppShareExtension' do
  use_frameworks!
  pod 'FileKit', '~> 4.0.1'
  pod 'Alamofire', '~> 4.4'
end

Затем я хотел использовать SVProgressHUD. Сначала я просто добавил его в основное приложение, и все было в порядке. Проблемы начались, когда я захотел использовать его еще и в расширении. С тех пор я несколько раз менял подфайл, и ни один из них не позволил мне использовать его как в приложении, так и в расширении. Хуже того, я даже не могу использовать его снова в основном приложении. Как только я добавляю его в Podfile, мое приложение не компилируется. Даже Alamofire и FileKit больше не могут компилироваться.

Вот мой новый подфайл, единственный, который не выдает никаких ошибок во время pod install.

platform :ios, '10.2'
use_frameworks!
target 'myApp' do
       target 'myAppShareExtension' do
                pod 'SVProgressHUD', :git => 'https://github.com/SVProgressHUD/SVProgressHUD.git'
                pod 'Alamofire', '~> 4.0'
                pod 'FileKit', '~> 4.0.1'
       end
end

Когда я пытаюсь скомпилировать, у меня возникают следующие ошибки, даже если я не пытаюсь импортировать SVProgressHUD и не использую его:

'sharedApplication' is unavailable: not available on iOS (App Extension) - Use view controller based solutions where appropriate instead.

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

Если у вас есть какие-либо предложения по поводу синтаксиса Podfile, среды сборки и т. д., пожалуйста, не стесняйтесь. Могу предоставить дополнительную информацию о

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


person radar    schedule 02.05.2017    source источник


Ответы (1)


После того, как вы увидите, где ошибка, вы поймете, в чем проблема.

#if !defined(SV_APP_EXTENSIONS)
    UIInterfaceOrientation orientation = UIApplication.sharedApplication.statusBarOrientation;
#else
    UIInterfaceOrientation orientation = CGRectGetWidth(self.frame) > CGRectGetHeight(self.frame) ? UIInterfaceOrientationLandscapeLeft : UIInterfaceOrientationPortrait;
#endif

Вы видите SV_APP_EXTENSIONS? Это означает, что если цель не является расширением приложения, она скомпилирует приведенный выше код, если это так, она скомпилирует нижний код. Итак, на данный момент вам нужно, чтобы он работал в вашей цели расширения приложения, вам нужно добавить макрос препроцессора в цель вашего расширения приложения.

введите здесь описание изображения

person Changwei    schedule 05.12.2017