2017-01-16 17 views
2

Я хочу использовать расширение для совместного использования URL-адреса с хост-приложением. urlShareManager - это одноэлемент во встроенной структуре, используемой для связи между приложением и расширением. Когда я вызываю urlShareManager в Viewcontroller, я могу добавить URL-адреса. Это не работает, когда я добавляю URL-адреса с расширением. Я прошел через код по строкам и, похоже, сохранил URL-адрес при добавлении одного из расширения. Тем не менее, единственными URL-адресами, которые я могу загрузить, являются те, которые сохраняются с помощью диспетчера просмотра приложений хоста. Я не уверен, что мне здесь не хватает.Не удается сохранить url совместно с расширением

urlShareManager

+ (id)UrlShareManager 
    { 
     static UrlShare *urlShareManager = nil; 
     static dispatch_once_t onceToken; 

     dispatch_once(&onceToken, ^{ 
      urlShareManager = [[self alloc] init]; 
    //  urlShareManager.urlArray = [[NSMutableArray alloc]init]; 
     }); 

     return urlShareManager; 
    } 

    - (id)init 
    { 
     if (self = [super init]) 
     { 
      self.urlArray = [[NSMutableArray alloc]init]; 
      self.urlArray = [self loadURLS]; 
     } 

     return self; 

    } 


    - (NSString *)getFileURL 
    { 
     NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.net.noizystudios.urlGroup"]; 
     NSURL *jsonURL = [NSURL URLWithString:[containerURL.path stringByAppendingString:@"/urlData.dat"]]; 
     NSString *filePath = [jsonURL absoluteString]; 
     NSLog(@"Filepath: %@", filePath); 
     return filePath; 
    } 

    - (void)addURL:(NSString *)url 
    { 
     self.urlArray = [NSMutableArray new]; 
     NSLog(@"URL STRING: %@", url); 
     Bookmark *urlBookmark = [[Bookmark alloc]init]; 
     urlBookmark.urlString = url; 
     [self.urlArray addObject:urlBookmark]; 
     [self saveURLS]; 
    } 

    - (NSMutableArray *)loadURLS 
    { 
     NSString *path = [self getFileURL]; 
     NSMutableArray *url = [[NSMutableArray alloc]init]; 
     url = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 
     NSLog(@"URL array inhoud: %@", url); 
     return url; 
    } 

    - (void)saveURLS 
    { 

     NSString *path = [self getFileURL]; 
     BOOL isSaved = [NSKeyedArchiver archiveRootObject:self.urlArray toFile:path]; 
     NSLog (isSaved ? @"saved" : @"not saved"); 

    } 



    @end 

ViewController

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


    UrlShare *urlManager = [UrlShare UrlShareManager]; 
    [urlManager addURL:@"http://www.reddit.com"]; 
    articleListArray = [urlManager loadURLS]; 
    [self.tableView reloadData]; 
} 

ActionRequestHandler

- (void)doneWithResults:(NSDictionary *)resultsForJavaScriptFinalize 
{ 
       ... 

        NSString *url = resultsForJavaScriptFinalize[@"URL"]; 
        UrlShare *urlManager = [UrlShare UrlShareManager]; 
        [urlManager addURL:url]; 


       ... 
       // Don't hold on to this after we finished with it. 
       self.extensionContext = nil; 
} 

ответ

1

Есть вы читали о песочнице и безопасности приложений на транспорте? А также по данным закладок URL?

В принципе, по соображениям безопасности пользователь должен указать файлы и URL-адреса для открытия, и ОС знает, что ваше приложение, как предполагается, сможет их открыть. Если вы хотите, чтобы одно приложение передало это разрешение другому приложению (а расширения в основном являются отдельными приложениями), вам необходимо перенести данные закладок, которые сочетают в себе разрешение и URL-адрес.

+0

Я не вижу, что это касается приложения Transport Security. Передача url, фактически только nsstring, в urlShareManager не является проблемой. Разрешить произвольные нагрузки установлено значение YES в файле info.plist. Я использую общий контейнер, поэтому песочница не должна быть проблемой? Я могу передать данные, я даже могу их сохранить. Кажется, я просто не могу его получить. – Vimy

+1

Получаете ли вы сообщения журнала на консоли? – uliwitness

+0

Хорошо, я нашел ошибку. В моем контроллере view я вызвал [urlManager saveURLS] без добавления URL-адреса. Поскольку self.array синглтона urlShareManager всегда был пустым, когда я вызывал метод save, он перезаписывал предыдущий файл urlData.dat .. – Vimy