2015-10-27 4 views
2

У меня есть приложение, которое периодически принимает изображения, и я хотел бы, чтобы они были загружены в поток iCloud Photo Stream сразу после того, как будут сделаны изображения.Задание сохраненного изображения для синхронизации с потоком фото iCloud

Похоже, что для этого необходимо выполнить определенные условия. Кажется, что он работает только при работе с iOS 8, устройство подключено к беспроводной сети и с помощью UIImagePickerController, чтобы снимать (а не AVCapture) хотя бы один раз. Кажется, что UIImagePickerController при представлении изменяет некоторые системные настройки, которые позволяют для последующей автоматической загрузки изображений в iCloud Photo Stream. Если я использую AVCapture только для съемки, это не сработает. Я подтвердил, что в настройках iCloud включено «Загрузить в мой поток фото», и есть активное беспроводное соединение.

Вот метод, используемый для сохранения изображения, полученного из UIImagePickerController:

- (void)saveImage : (UIImage *)image { 
    // Add image to the photo library 
    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
     PHAssetChangeRequest *assetChangeRequest = 
     [PHAssetChangeRequest creationRequestForAssetFromImage:image]; 
    } completionHandler:^(BOOL success, NSError *error) { 
     if (!success) 
      NSLog(@"Error creating asset: %@", error); 
    }]; 
} 

Когда работает на моем IPad с прошивкой 8, ниже приведены данные, которые я вижу в системных журналах устройства:

Oct 22 21:11:06 iPad mstreamd[14409] <Notice>: (Note) PS: MSPublisher - xxxxxxxx Submitting 1 asset collections for publication. 
Oct 22 21:11:06 iPad mstreamd[14409] <Notice>: (Note) PS: MSPublisher - xxxxxxxx Sending metadata... 
Oct 22 21:11:10 iPad mstreamd[14409] <Notice>: (Note) PS: MSPublisher - xxxxxxxx uploading 1 assets... 
Oct 22 21:11:11 iPad mstreamd[14409] <Notice>: (Note) PS: Received push notification for invitations topic: com.apple.mediastream.subscription.push userInfo: { 
     r = xxxxxxxx; 
    } 
Oct 22 21:11:11 iPad mstreamd[14409] <Notice>: (Note) PS: <MSIOSMediaStreamDaemon: 0x1662ad80>: Push notification received for My Photo Stream with targetPersonID xxxxxxxx. 
Oct 22 21:11:12 iPad mstreamd[14409] <Notice>: (Note) mstreamd: <MSPowerBudget: 0x1666fae0>: Plugged in to external power. Allowing file transfers. 
Oct 22 21:11:12 iPad mstreamd[14409] <Notice>: (Note) mstreamd: <MSPowerBudget: 0x1666fae0>: Push received. Allowing file transfers to continue for 60.00 seconds 
Oct 22 21:11:12 iPad mstreamd[14409] <Notice>: (Note) PS: MSPublisher - xxxxxxxx Sending metadata... 
Oct 22 21:11:12 iPad mstreamd[14409] <Notice>: (Note) PS: MSSubscriber - xxxxxxxx Found 1 new asset collections. 
Oct 22 21:11:13 iPad assetsd[11536] <Warning>: Unable to open file to save extended attributes (No such file or directory). 

при запуске на моем iPhone с прошивкой 9.1, у меня есть подобные записи журнала, за исключением того, у меня есть дополнительные предупреждения/сообщения об ошибках сервера кэширования жирным шрифтом:

Oct 25 22:35:28 iPhone mstreamd[1735] <Notice>: (Note) PS: MSPublisher - xxxxxxxx Submitting 1 asset collections for publication. 
Oct 25 22:35:28 iPhone mstreamd[1735] <Notice>: (Note) PS: MSPublisher - xxxxxxxx Sending metadata... 
**Oct 25 22:35:28 iPhone AssetCacheLocatorService[1658] <Warning>: #df99fdd0 [I:AssetCacheLocatorService.queue] found no caching servers** 
Oct 25 22:35:28 iPhone mstreamd[1735] <Notice>: (Note) PS: MSPublisher - xxxxxxxx uploading 1 assets... 
**Oct 25 22:35:28 iPhone mstreamd[1735] <Notice>: (Error) mmcs: __mmcs_proxy_locator_exists_block_invoke:167 might have caching server returned with error: Error Domain=NSPOSIXErrorDomain Code=60 "Operation timed out" UserInfo={com.apple.AssetCacheLocator.tag=#1963bd2d, NSLocalizedDescription=quick miss requested}** 
**Oct 25 22:35:29 iPhone mstreamd[1735] <Notice>: (Note) PS: MSPublisher - xxxxxxxx Sending metadata...** 
Oct 25 22:35:29 iPhone mstreamd[1735] <Notice>: (Note) PS: Received push notification for invitations topic: com.apple.mediastream.subscription.push userInfo: { 
     r = xxxxxxxx; 
    } 
Oct 25 22:35:29 iPhone mstreamd[1735] <Notice>: (Note) PS: <MSIOSMediaStreamDaemon: 0x157e0c530>: Push notification received for My Photo Stream with targetPersonID xxxxxxxx. 
Oct 25 22:35:29 iPhone mstreamd[1735] <Notice>: (Note) mstreamd: <MSPowerBudget: 0x157e84410>: Plugged in to external power. Allowing file transfers. 
Oct 25 22:35:29 iPhone mstreamd[1735] <Notice>: (Note) mstreamd: <MSPowerBudget: 0x157e84410>: Push received. Allowing file transfers to continue for 60.00 seconds 
Oct 25 22:35:29 iPhone mstreamd[1735] <Notice>: (Note) PS: MSSubscriber - xxxxxxxx Found 1 new asset collections. 
Oct 25 22:35:30 iPhone assetsd[1624] <Warning>: Unable to open file to save extended attributes (No such file or directory). 

В этой ситуации с iOS 9 изображение не загружается, когда мое приложение активно, и загружается, только когда приложение переходит в фоновый режим.

Я подозреваю, что проблема связана с 1. некоторые системные настройки, которые активируются с представлением UIImagePickerController только в iOS8 или 2. Некоторая проблема с кешированием серверов в iOS 9, как это предложено в записях журнала.

У кого-нибудь есть идеи, что происходит? Благодарим за любую идею! Благодаря!

ответ

0

Я думаю, что нашел решение. Похоже, что если AVCaptureSession запущен, iCloud Photo Stream не будет синхронизироваться. Вызов метода stopRunning (как показано ниже), кажется, сделать трюк:

[self.cameraSession stopRunning]; 
+0

Ниже приведены условия, необходимые для синхронизации работы: https://support.apple.com/en-us/HT203511 – euginator