Мое приложение для iOS пишет файлы в iCloud, но эти файлы не отображаются в Finder в разделе iCloud. Мое приложение успешно написало файлы в iCloud, работающий на одном iPhone, а затем прочитал этот файл в другой iPhone, доказывая, что файлы действительно существуют в iCloud, но они видны только для моего приложения. Записанные файлы кажутся частными только для моего приложения. Все устройства и компьютеры вошли в один и тот же идентификатор Apple в iCloud. Такая же сборка моего приложения работала в обоих iPhone. URL -адрес, который мой приложение использует для iCloud, включает в себя каталог «документы»: < /p>
NSFileManager *fman = [NSFileManager defaultManager];
NSURL *urlDrive = [fman URLForUbiquityContainerIdentifier: nil];
NSURL *urlDocs = [urlDrive URLByAppendingPathComponent:@"Documents"];
NSURL *urlFile = [urlDocs URLByAppendingPathComponent: @"hello.txt"];
< /code>
Где повсеместный контейнер определяется в файле info.plist как: < /p>
NSUbiquitousContainers
iCloud.com.{my domain}.{my app}
NSUbiquitousContainerIsDocumentScopePublic
NSUbiquitousContainerSupportedFolderLevels
Any
NSUbiquitousContainerName
{my app}
UIFileSharingEnabled
< /code>
Несмотря на то, что мое приложение может писать с одного iPhone и читать с другого iPhone, я не могу получить файлы или даже каталог для {my App}, чтобы появиться в любом другом исследователе файлов, как Finder или в приложении Files в телефонах. Проблема в том, что файлы не появляются в каталоге ICLOUD в Finder, даже если файл доступен для моего приложения на iPhone. Самый короткий код, который демонстрирует проблему, - это код, который я использовал для чтения и записи ICloud: < /p>
void writeToiCloud(void) {
NSFileManager *fman = [NSFileManager defaultManager];
NSURL *urlDrive = [fman URLForUbiquityContainerIdentifier: nil];
NSURL *urlDocs = [urlDrive URLByAppendingPathComponent:@"Documents"];
if( ! [fman fileExistsAtPath: urlDocs.path] ) { //..need to create the Docs directory
NSError *err00 = nil;
@try {
[fman createDirectoryAtURL: urlDocs withIntermediateDirectories:true
attributes:nil error:&err00];
} @catch (NSException *except) {
NSLog(@"Exception creating directory %@", except);
}
} //..directory is now created if needed
NSURL *urlFile = [urlDocs URLByAppendingPathComponent:@"hello.txt"];
NSData *fdata = [@"Hello world" dataUsingEncoding: NSUTF8StringEncoding];
NSError *errorReturn = nil;
Boolean ret = [fdata writeToURL: urlFile options: NSDataWritingAtomic error: &errorReturn];
NSLog(@"returned %1d, error=%@", ret?1:0, errorReturn); //always says "1 error=(nil)"
}
void readFromiCloud(void) {
NSFileManager *fman = [NSFileManager defaultManager];
NSURL *urlDrive = [fman URLForUbiquityContainerIdentifier: nil];
NSURL *urlDocs = [urlDrive URLByAppendingPathComponent:@"Documents"];
NSURL *urlFile = [urlDocs URLByAppendingPathComponent:@"hello.txt"];
if([fman fileExistsAtPath: urlFile.path]) {
NSString *fullFN = [localDocsDirectory() stringByAppendingPathComponent: @"hello-Local.txt"];
NSURL *destURL = [NSURL fileURLWithPath: fullFN];
@try {
[fman copyItemAtURL: urlFile toURL:destURL error:&errReading];
NSLog(@"file copied from iCloud to local");
} @catch(NSException *exc) {
NSLog(@"copyItem threw %@", exc);
}
} else {NSLog(@"file %@ DOES NOT EXIST!", urlFile);}
}
< /code>
Одна странная вещь в том, что при использовании iPhone 7, работающего в iOS 15.8.4, и iPhone 13, работающего в iOS 18.3.2, записывает из iPhone 7, доступным для моего приложения, работающего на iPhone 13, но файлы, написанные iPhone 13, не были доступны для iPhone 7. Попытки чтения заявили, что файл не существовал - даже в течение нескольких часов для синхронизации ICloud. Оба телефона были подключены к Интернету все время. Я также увеличивал имя пакета версий приложения всякий раз, когда вносил изменение в файл plist.
Подробнее здесь: https://stackoverflow.com/questions/796 ... pps-like-f
Как я могу сделать файлы, которые мои приложения для iOS записывают в iCloud, доступным для других приложений, таких как ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение