すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:クイックスタート (iOS SDK)

最終更新日:Jun 11, 2026

このトピックでは、OSS SDK for iOS を使用してオブジェクトをアップロードおよびダウンロードする方法について説明します。

前提条件

開始する前に、次のことを確認してください。

  • OSS SDK for iOS がインストール済みであること。 詳細については、「インストール (iOS SDK)」をご参照ください。

デモプロジェクト

次のデモプロジェクトでは、バケットの作成、ローカルファイルのアップロード、オブジェクトのダウンロード方法を説明します。

デモプロジェクトを実行するには:

  • git clone を使用して デモプロジェクト をクローンします。

  • 必要なパラメーターを設定します。

  • Security Token Service (STS) を起動します。

    • sts_local_server ディレクトリから 認証スクリプト を実行してローカル STS 認証サーバーを起動し、AccessKeyIdAccessKeySecretRoleArn パラメーターを設定します。

    • httpserver.py を使用してローカル HTTP サービスを起動します。 クライアントは、このローカル HTTP サービスから StsToken.AccessKeyIdStsToken.SecretKeyStsToken.SecurityToken の値を取得します。

iOS デモを起動すると、アプリには画像選択 ([Select])、カスタム署名付きアップロード ([CustomSign])、アップロード ([Put])、ダウンロード ([Get])、サムネイル取得 ([GetResizeImage])、テキストウォーターマーク ([Watermark])、アップロードコールバック ([triggerCallback]) のエントリーポイントが用意されています。

サンプルコード

以下の手順では、iOS および macOS でオブジェクトをアップロードおよびダウンロードする方法を説明します。

  1. OSS パッケージをインポートします。

    OSS API を呼び出す前に、必要なヘッダーファイルをインポートします。

    #import <AliyunOSSiOS/OSSService.h>
  1. OSSClient インスタンスを 初期化 します。

    1. 認証モードを選択します。

      OSS SDK for iOS は、プレーンテキスト、自己署名、STS 認証の 3 つの認証モードをサポートしています。 モバイルアプリでは、STS 認証の使用を推奨します。STS 認証は、キーが漏洩した場合のリスクを軽減する有効期間の短い認証情報を発行し、アプリを更新することなくローテーションできます。 AccessKey ID と AccessKey Secret をアプリのバイナリにハードコーディングすると、バイナリがリバースエンジニアリングされた場合にアカウントが漏洩するリスクがあり、新しいバージョンをリリースせずに認証情報をローテーションすることもできなくなります。

      詳細については、「STS 認証モード」をご参照ください。

      1. 認証情報を取得します。

        1. プレーンテキストモードでは、AccessKey ID と AccessKey Secret を直接使用して認証します。

        2. 自己署名モードでは、署名文字列を生成して認証します。 詳細については、「自己署名モード」をご参照ください。

        3. STS 認証モードでは、Security Token Service (STS) によって発行された一時的なアクセス認証情報を使用します。 AssumeRole API を呼び出すか、STS SDK を使用して一時的な認証情報を取得します。 詳細については、「STS の一時的な認証情報を使用した OSS へのアクセス」をご参照ください。

      2. 認証情報を使用して OSS SDK for iOS を初期化します。

    2. 次のコードは、アプリケーションのライフサイクル全体で利用する OSSClient インスタンスを初期化します。 OSSAuthCredentialProvider は、STS 認証情報が期限切れになると、サーバーから自動的に更新します。

      @interface AppDelegate ()
      @property (nonatomic, strong) OSSClient *client;
      @end
      /**
       * STS 情報を取得するための URL。 独自のサーバーで設定します。
       */
      #define OSS_STS_URL                 @"oss_sts_url"
      /**
       * バケットが存在するリージョンのエンドポイント。
       */
      #define OSS_ENDPOINT                @"your bucket's endpoint"
      /**
       * バケットが存在するリージョン。
       */
      #define OSS_REGION                	@"your bucket's region"
      @implementation AppDelegate
      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
          // アプリケーション起動後のカスタマイズのためのオーバーライドポイント。
          // OSSClient インスタンスを初期化します。
          [self setupOSSClient];    
          return YES;
      }
      - (void)setupOSSClient {
          // 認証情報を自動的に更新するプロバイダーを初期化します。
          id<OSSCredentialProvider> credentialProvider = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:OSS_STS_URL];   
          // タイムアウト期間や DNS 事前解決などのクライアント側の設定。
          OSSClientConfiguration *cfg = [[OSSClientConfiguration alloc] init];
          cfg.signVersion = OSSSignVersionV4;
          client = [[OSSClient alloc] initWithEndpoint:OSS_ENDPOINT credentialProvider:credentialProvider clientConfiguration:cfg];
          client.region = OSS_REGION;
      }
      説明

      アプリが 1 つのリージョン内の単一のバケットを使用する場合、OSSClient のライフサイクルをアプリケーションのライフサイクルに合わせます。 「リージョンとエンドポイント」をご参照ください。

  2. バケットを作成します。

    次のコードは、examplebucket という名前のバケットを作成します。

    // バケットを作成するリクエストを作成します。
    OSSCreateBucketRequest * create = [OSSCreateBucketRequest new];
    // バケット名を examplebucket に設定します。
    create.bucketName = @"examplebucket";
    // アクセス制御リスト (ACL) を private に設定します。
    create.xOssACL = @"private";
    // ストレージクラスを低頻度アクセス (IA) に設定します。
    create.storageClass = OSSBucketStorageClassIA;
    OSSTask * createTask = [client createBucket:create];
    [createTask continueWithBlock:^id(OSSTask *task) {
        if (!task.error) {
            NSLog(@"create bucket success!");
        } else {
            NSLog(@"create bucket failed, error: %@", task.error);
        }
        return nil;
    }];
    // タスクが同期的に完了するのを待ちます。
    // [createTask waitUntilFinished];          
    説明

    すべての SDK 操作は OSSTask オブジェクトを返します。 OSSTask に継続ブロックを設定して結果を非同期に処理するか、waitUntilFinished を呼び出してタスクが完了するまでブロックします。

  3. ローカルファイルをアップロードします。

    次のコードは、ローカルファイルを OSS にアップロードします。

    パラメーター

    説明

    bucketName

    ターゲットバケットの名前。 例: examplebucket

    objectKey

    オブジェクトの完全なパス (バケット名は含みません)。 例: exampledir/testdir/exampleobject.txt

    uploadingFileURL

    ローカルファイルのパス (NSURL 形式)。

    uploadingData

    uploadingFileURL の代替として、 NSData を直接渡します。

    uploadProgress

    今回送信されたバイト数、送信済みの合計バイト数、送信予定の合計バイト数を報告するコールバックブロック。

    OSSPutObjectRequest * put = [OSSPutObjectRequest new];
    // バケット名を指定します。 例: examplebucket。
    put.bucketName = @"examplebucket";
    // オブジェクトの完全なパスを指定します。 バケット名は含めないでください。 例: exampledir/testdir/exampleobject.txt。
    put.objectKey = @"exampledir/testdir/exampleobject.txt";
    put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
    // または、NSData を直接アップロードします。
    // put.uploadingData = <NSData *>;
    put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
        NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
    };
    OSSTask * putTask = [client putObject:put];
    [putTask continueWithBlock:^id(OSSTask *task) {
        if (!task.error) {
            NSLog(@"upload object success!");
        } else {
            NSLog(@"upload object failed, error: %@" , task.error);
        }
        return nil;
    }];
    // タスクが完了するのを待ちます。
    // [putTask waitUntilFinished];
  4. オブジェクトをダウンロードします。

    次のコードは、オブジェクトをローカルデバイスにダウンロードします。

    パラメーター

    説明

    bucketName

    オブジェクトを含むバケットの名前。 例: examplebucket

    objectKey

    オブジェクトの完全なパス (バケット名は含みません)。 例: exampledir/testdir/exampleobject.txt

    downloadProgress

    今回書き込まれたバイト数、書き込み済みの合計バイト数、書き込み予定の合計バイト数を報告するコールバックブロック。

    OSSGetObjectRequest * request = [OSSGetObjectRequest new];
    // バケット名を指定します。 例: examplebucket。
    request.bucketName = @"examplebucket";
    // オブジェクトの完全なパスを指定します。 バケット名は含めないでください。 例: exampledir/testdir/exampleobject.txt。
    request.objectKey = @"exampledir/testdir/exampleobject.txt";
    request.downloadProgress = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) {
        NSLog(@"%lld, %lld, %lld", bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);
    };
    OSSTask * getTask = [client getObject:request];
    [getTask continueWithBlock:^id(OSSTask *task) {
        if (!task.error) {
            NSLog(@"download object success!");
            OSSGetObjectResult * getResult = task.result;
            NSLog(@"download result: %@", getResult.downloadedData);
        } else {
            NSLog(@"download object failed, error: %@" ,task.error);
        }
        return nil;
    }];
    // タスクが完了するのを待ちます。
    // [task waitUntilFinished];