18

iCloud Drive フォルダにアプリのフォルダが表示されません。

これは、ファイルを iCloud Drive に送信する方法です。

- (IBAction)btnStoreTapped:(id)sender {
    // Let's get the root directory for storing the file on iCloud Drive
    [self rootDirectoryForICloud:^(NSURL *ubiquityURL) {
        NSLog(@"1. ubiquityURL = %@", ubiquityURL);
        if (ubiquityURL) {

            // We also need the 'local' URL to the file we want to store
            //NSURL *localURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Photo" ofType:@"pdf"]];


            NSURL *localURL = [self localPathForResource:@"document" ofType:@"doc"];
            NSLog(@"2. localURL = %@", localURL);

            // Now, append the local filename to the ubiquityURL
            ubiquityURL = [ubiquityURL URLByAppendingPathComponent:localURL.lastPathComponent];
            NSLog(@"3. ubiquityURL = %@", ubiquityURL);

            // And finish up the 'store' action
            NSError *error;
            if (![[NSFileManager defaultManager] setUbiquitous:YES itemAtURL:localURL destinationURL:ubiquityURL error:&error]) {
                NSLog(@"Error occurred: %@", error);
            }else{
                NSLog(@"Succeed");
            }
        }
        else {
            NSLog(@"Could not retrieve a ubiquityURL");
        }
    }];
}

- (void)rootDirectoryForICloud:(void (^)(NSURL *))completionHandler {

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSURL *rootDirectory = [[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]URLByAppendingPathComponent:@"Documents"];

        if (rootDirectory) {
            if (![[NSFileManager defaultManager] fileExistsAtPath:rootDirectory.path isDirectory:nil]) {
                NSLog(@"Create directory");
                [[NSFileManager defaultManager] createDirectoryAtURL:rootDirectory withIntermediateDirectories:YES attributes:nil error:nil];
            }
        }

        dispatch_async(dispatch_get_main_queue(), ^{
            completionHandler(rootDirectory);
        });
    });
}

- (NSURL *)localPathForResource:(NSString *)resource ofType:(NSString *)type {
    NSString *documentsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    NSString *resourcePath = [[documentsDirectory stringByAppendingPathComponent:resource] stringByAppendingPathExtension:type];
    return [NSURL fileURLWithPath:resourcePath];
}

実際、私はこの投稿で説明されているすべてを行いました

すべてが順調に見えます。ファイルを正常にアップロードでき、ターミナル経由でコンピューターに表示できます。

ここに画像の説明を入力

ここに画像の説明を入力

iPhoneからアップロードしたばかりのファイルを見ることができます。

しかし、Mac または icloud.com の iCloud Drive フォルダには何も表示されません。すべてが問題ないように見え、エラーがないのに、アプリのフォルダーが表示されないのはなぜですか?

4

5 に答える 5

10

私は迅速に同じコードを試しましたが、同じ問題が発生しました。

これは私のために働いたものです:

1) info.plist ソース コードで次の行を見つけます。

<key>CFBundleVersion</key>
<string>1</string>

2) バージョン番号を増やします。1 の場合は、2 に増やします。バージョン番号が何であれ、同じことを行います。

3) 必要に応じて、デバイスからアプリをアンインストールし、上記の 2 つの手順に従って再実行します。

于 2017-09-20T07:28:42.540 に答える
6

しかし、Mac または icloud.com の iCloud Drive フォルダには何も表示されません。すべてが問題ないように見え、エラーがないのに、アプリのフォルダーが表示されないのはなぜですか?

これは新しいアプリですか、それとも新しく作成された iCloud コンテナーですか? その理由は次のとおりです。NSUbiquitousContainerIsDocumentScopePublic=true は、アプリ (および資格のある iCloud コンテナー) がレビューと承認を経て初めて有効になります。

その「欠落している情報」をどこで読んだか思い出せません (少なくとも、Apple のドキュメントからは入手できませんでした)。

これを証明しているように見える私の経験からの別の例: 既存のアプリ (「古いスタイル - TeamIdentifierPrefix」iCloud コンテナーを使用) では、そのコンテナーを iCloud ドライブに表示できます。しかし、新しいコンテナは iCloud Drive で「一般公開」されることはありません (Mac で Terminal.app を使用して見ることができるのは難しいことです)。アプリ (新しいコンテナーを含む) が承認され、AppStore で利用できるようになったら、Info.plist でもう一度プレイできます (新しいコンテナーを表示/非表示にするなど)。

于 2015-05-29T19:41:38.867 に答える