Не могу распространить расширение Ma c Catalyst - PullRequest
1 голос
/ 16 января 2020

Я успешно загрузил в Appstore для iOS приложение с несколькими расширениями, но при попытке загрузить то же приложение для Ma c AppStore (приложение Ma c Catalyst) я получаю следующую ошибку из Xcode на двух расширениях

ERROR ITMS-90355: "Missing Info.plist value. No value for NSExtensionPrincipalClass found in extension Info.plist   
for MyApp.app/Contents/PlugIns/MyExtension.appex"

Эти расширения являются расширением общего ресурса и расширением действия с файлом раскадровки, поэтому, если я установлю ключ NSExtensionPrincipalClass в файле Info.plist, я получу следующее сообщение в консоли

Invalid Configuration: Either NSExtensionMainStoryboard or NSExtensionPrincipalClass   
must be specified in the extension's Info.plist file but not both.

И, конечно, интерфейс расширения не появляется и ничего не работает

У кого-нибудь есть идеи, как решить эту проблему?

В качестве альтернативы есть возможность установить только NSExtensionPrincipalClass введите файл Info.plist, а затем программно вызовите файл раскадровки?

Заранее всем спасибо

Ванни

Ответы [ 4 ]

0 голосов
/ 26 марта 2020

Вдохновившись обходным решением Алессандро Петролати, я думаю, что нашел более простое решение, которое, по крайней мере, в моем случае работает очень хорошо в обоих расширениях.

1.  Replace in .plist NSExtensionMainStoryboard with NSExtensionPrincipalClass
2.  Update YourViewController.m file

Добавьте этот метод init в ваш файл класса .m

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"YournStoryboardName" bundle:nil];
        self = (YourViewController*) [storyboard instantiateViewControllerWithIdentifier:@"YourStoryboardID"];
    }
    return self;
}

Кажется, это слишком просто, чтобы быть правдой ...

Проверка пакета прошла успешно и Мне наконец-то удалось загрузить приложение в AppStore Connect без каких-либо проблем!

Все, что мне нужно сделать, это проверить последние детали, прежде чем я go вживую ...

Попытаться поверить !

Дайте мне знать, какие у вас впечатления

0 голосов
/ 11 марта 2020

Сейчас Apple решила проблему, и я смог загрузить приложение с расширением без проблем.

0 голосов
/ 22 марта 2020

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

1.  include MyXib_Wrapper.h and MyXib_Wrapper.m
2.  Add to AudioUnitInterface.storyboard the ID mainStoryID
3.  Remove or comment the <AUAudioUnitFactory>  from your derived AUViewController class
4.  Update code in MyXib_Wrapper.m -> createAudioUnitWithComponentDescription according to your code (if you are performing more tasks)
5.  Replace in .plist NSExtensionMainStoryboard with NSExtensionPrincipalClass
6.  Sets MyXib_Wrapper for NSExtensionPrincipalClass and factoryFunction (very important!)

MyXib_Wrapper.h

#import <CoreAudioKit/AUViewController.h>
#import "AudioUnitViewController.h"

@class AudioUnitViewController;

@interface MyXib_Wrapper : AUViewController <AUAudioUnitFactory> {

    AudioUnitViewController *vc;
}
@end

MyXib_Wrapper.m

#import "MyXib_Wrapper.h"
#import "AudioUnitViewController.h"
#import "MyAudioUnit.h"

@implementation MyXib_Wrapper

- (MyAudioUnit *) createAudioUnitWithComponentDescription:(AudioComponentDescription) desc error:(NSError **)error {
    vc.audioUnit = [[MyAudioUnit alloc] initWithComponentDescription:desc error:error];

    // perform here more tasks    
    return vc.audioUnit;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"AudioUnitInterface" bundle:nil];
        vc = (AudioUnitViewController*) [storyboard instantiateViewControllerWithIdentifier:@"mainStoryID"];
    }
    return self;
}

#pragma mark - View lifecycle
-(UIView*)view {
    return vc.view;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.preferredContentSize = vc.preferredContentSize;
}
@end
0 голосов
/ 04 марта 2020

В моем расширении я использую раскадровку, можно ли использовать NSExtensionPrincipalClass вместо NSExtensionMainStoryboard? Тем временем я отправил отзыв в Apple,

...