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

HTTPDNS:Alibaba Cloud OSS SDK for iOS で HTTPDNS を使用するためのベストプラクティス

最終更新日:Nov 09, 2025

このトピックでは、iOS 向け Alibaba Cloud Object Storage Service (OSS) SDK と HTTPDNS を統合する方法について説明します。

1. 背景

Alibaba Cloud Object Storage Service (OSS) は、汎用のクラウドストレージサービスです。開発者は、プロファイル写真、画像、音声、動画などのファイルをさまざまなアプリケーションから簡単に保存およびアクセスできます。 iOS で OSS を使用するには、OSS iOS SDK を統合する必要があります。

HTTPDNS SDK と OSS iOS SDK を組み合わせることで、OSS ドメイン名を解決できます。この統合により、ファイル転送の安定性と速度が向上します。また、ドメイン名に対するハイジャック防止保護を提供し、アプリケーションが OSS にアクセスする際のネットワークエクスペリエンスを最適化するために DNS 解決を高速化します。

2. 統合ソリューション

iOS では、EMAS ローカルプロキシサービスを使用して HTTPDNS を統合できます。ローカルプロキシは、OSS リクエストの透過的な転送を提供し、DNS 解決を最適化します。

2.1 HTTPDNS プロキシのインストール

Podfile に EMASLocalProxy 依存関係を追加します:

source 'https://github.com/aliyun/aliyun-specs.git'

target 'yourAppTarget' do
    use_framework!
    
    pod 'AlicloudHTTPDNS', 'x.x.x'
    pod 'AliyunOSSiOS', 'x.x.x'
    pod 'EMASLocalProxy', 'x.x.x'
end

バージョン要件:

  • AlicloudHTTPDNS: >= 3.0.0

  • AliyunOSSiOS: >= 2.11.2

  • EMASLocalProxy: >= 1.4.0

詳細については、「ローカルプロキシソリューション」をご参照ください。

2.1 HTTPDNS SDK の初期化

// AppDelegate.m
#import <AlicloudHttpDNS/AlicloudHttpDNS.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // HTTPDNS を初期化します。
    HttpDnsService *httpdns = [[HttpDnsService alloc] initWithAccountID:@"your-account-id"
                                                              secretKey:@"your-secret-key"];
    [httpdns setLogEnabled:YES];
    [httpdns setHTTPSRequestEnabled:YES];
    [httpdns setPersistentCacheIPEnabled:YES];
    [httpdns setNetworkingTimeoutInterval:5];

    NSLog(@"HTTPDNS SDK 初期化完了!");
    return YES;
}

2.2 OSS クライアントの構成

OSS iOS SDK は、Objective-C 版と Swift (V2) 版で利用できます。 API は同一ではありませんが、HTTPDNS を統合する原則は両方のバージョンで同じです。このトピックでは、Objective-C 版を例として使用します。

#import <AliyunOSSiOS/AliyunOSSiOS.h>
#import <AlicloudHttpDNS/AlicloudHttpDNS.h>
#import "EMASLocalHttpProxy.h"

// 1. DNS リゾルバーを構成します。
[EMASLocalHttpProxy setDNSResolverBlock:^NSArray<NSString *> * _Nullable(NSString * _Nonnull hostname) {
    HttpDnsService *httpdns = [HttpDnsService sharedInstance];
    HttpdnsResult *result = [httpdns resolveHostSync:hostname byIpType:HttpdnsQueryIPTypeBoth];

    if (result && (result.hasIpv4Address || result.hasIpv6Address)) {
        NSMutableArray<NSString *> *allIPs = [NSMutableArray array];
        if (result.hasIpv4Address) [allIPs addObjectsFromArray:result.ips];
        if (result.hasIpv6Address) [allIPs addObjectsFromArray:result.ipv6s];
        return allIPs;
    }

    return nil; // HTTPDNS の解決に失敗した場合は、nil を返してシステム DNS にフォールバックします。
}];


// 2. プロキシサービスを開始し、ポートを取得します。
UInt16 proxyPort = 0;
if ([EMASLocalHttpProxy isProxyReady]) {
    proxyPort = [EMASLocalHttpProxy proxyPort];
}

// 3. OSS クライアント構成を作成します。
id<OSSCredentialProvider> credentialProvider = [[OSSPlainTextAKSKPairCredentialProvider alloc]
    initWithPlainTextAccessKey:@"your-access-key-id"      // 実際の AccessKey ID に置き換えます。
    secretKey:@"your-access-key-secret"];                 // 実際の AccessKey Secret に置き換えます。

OSSClientConfiguration *config = [OSSClientConfiguration new];
NSString *endpoint = @"https://oss-cn-hangzhou.aliyuncs.com";

// 4. HTTPDNS プロキシを構成します。
if (proxyPort > 0) {
    config.proxyHost = @"127.0.0.1";
    config.proxyPort = @(proxyPort);
}

// 5. OSS クライアントを作成します。
OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint
                                      credentialProvider:credentialProvider
                                       clientConfiguration:config];
重要
  • OSS SDK を初期化する前に、HTTPDNS SDK とプロキシを初期化する必要があります。

3. まとめ

HTTPDNS と OSS iOS SDK を組み合わせることで、DNS ハイジャックを防ぎ、ファイル転送を高速化します。この組み合わせにより、アクセスの安定性とセキュリティが向上します。この実装の中核は、OSS の HTTPDNS 解決ロジックを含むローカルプロキシサービスを構成することです。

重要なポイント:

  • 初期化順序: HTTPDNS SDK とローカルプロキシは、OSS クライアントの前に初期化する必要があります。

  • フォールバック処理: setDNSResolverBlock は、HTTPDNS 統合の中核です。 HTTPDNS 解決が失敗した場合、または結果が返されない場合は、nil を返してシステム DNS にフォールバックします。