# SDKをアップグレードする

# 最新のSDKにアップグレードする

LINE SDK for iOS Swiftの最初のバージョンは5.0.0です。このバージョンは以前のObjective-Cで書かれたSDKとは互換性がありません。LINE SDK for iOS Swiftにアップグレードする場合は、コードの一部を変更する必要があります。

注意

新しいLINE SDK for iOS Swiftは、Swiftのプロジェクトで使用する前提で設計されています。ただし、新しいSDKはObjective-Cのコードと共に使用できます。SDKをObjective-Cのコードと共に使用する方法については、「Objective-CのコードでSDKを使用する」を参照してください。

SDKをアップグレードするには、プロジェクトの言語を問わず以前のSDKに関連するすべてのコードを削除し、「プロジェクトを設定する」の手順に従ってクリーンインストールを実行することをお勧めします。 ただし、現在の実装に基づいて変更する場合の一般的な手順は以下のとおりです。

  1. コードベースから以前のLineSDK.frameworkファイルを削除する。

    • CocoaPodsやCarthageなどのパッケージマネージャーを使用した場合は、パッケージ定義ファイル(PodfileやCartfile)から「LineSDK」のエントリを削除します。それからクリーンインストールを実行して、LineSDK.frameworkファイルへの参照をプロジェクトから削除します。
    • バイナリファイルをダウンロードして使った場合は、プロジェクトからそのファイルを削除します。
  2. Info.plistファイルをクリーンアップする。LineSDKConfigエントリは使用されないため、安全に削除できます。

  3. LINE SDK for iOS Swiftをインストールする。詳しい手順については、「プロジェクトを設定する」を参照してください。

  4. チャネルIDとコールバックの制御処理をAppDelegateファイルに設定する。

    アプリの起動直後に、以下のようにLoginManager.setupメソッドを呼び出します。

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Add this to your "didFinishLaunching" delegate method.
        LoginManager.shared.setup(channelID: "YOUR_CHANNEL_ID", universalLinkURL: nil)
        
        return true
    }
    

    URLを開く制御を、以下のように更新します。

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        return LoginManager.shared.application(app, open: url, options: options)
    }
    

# コードを更新して最新のSDKを使用する

上のセクションまでの作業が終わっていれば、コードの他の部分を更新して最新のSDKを使用する準備ができています。以下のセクションでは、一般的な例についていくつか説明します。

ここでは、SDKのすべての機能は説明しません。ただし、LINE SDKの対応するタイプは、同様の規則に従っているため簡単に見つけられるはずです。コードを更新し、最新のLINE SDKを使ってプロジェクトをコンパイルしてください。

最新のLINE SDK for iOS Swiftに対応するサンプルアプリを提供しています。SDKのオープンソースリポジトリ (opens new window)にアクセスして、基本的な組み込み方法と使い方を確認してください。

LINEを介してユーザーをアプリにログインさせる

LINE SDK 4.xで発行されるアクセストークンは、バージョン5以降ではサポートされません。 LINE SDKをアップグレードする場合は、ユーザーが再ログインするまで、アプリからLINEプラットフォームにアクセスできません。

# 以前

// First set the delegate to the current object
LineSDKLogin.sharedInstance().delegate = self
LineSDKLogin.sharedInstance().start()

// MARK: LineSDKLoginDelegate

func didLogin(_ login: LineSDKLogin, credential: LineSDKCredential?, profile: LineSDKProfile?, error: Error?) {
    
    if let error = error {
        print("LINE Login Failed with Error: \(error.localizedDescription) ")
        return
    }

    print("LINE Login Succeeded")
}

# 現在

LoginManager.shared.login(permissions: [.profile]) {
    result in
    switch result {
    case .success(let loginResult):
        print("User name: \(loginResult.userProfile?.displayName ?? "nil")")
    case .failure(let error):
        print("Error: \(error)")
    }
}

# ユーザープロフィールを取得する

# 以前

var apiClient: LineSDKAPI
apiClient = LineSDKAPI(configuration: LineSDKConfiguration.defaultConfig())

apiClient.getProfile(queue: .main) {
    (profile, error) in
    
    if let error = error {
        print("Error getting profile \(error.localizedDescription)")
    }
    
    print(profile?.displayName ?? "none")
    print(profile?.pictureURL ?? "none")
    print(profile?.statusMessage ?? "none")
    print(profile?.userID ?? "none")
}

# 現在

API.getProfile { result in
    switch result {
    case .success(let profile):
        print("User name: \(profile.displayName)")
    case .failure(let error):
        print("Error: \(error)")
    }
}

# ユーザーをログアウトする

# 以前

var apiClient: LineSDKAPI
apiClient = LineSDKAPI(configuration: LineSDKConfiguration.defaultConfig())

apiClient.logout(queue: .main) {
    (success, error) in
    
    if success {
        print("Logout Succeeded")
    }
    else {
        print("Logout Failed \(error?.localizedDescription as String?)")
    }
}

# 現在

LoginManager.shared.logout { result in
    switch result {
    case .success:            print("Logout Succeeded")
    case .failure(let error): print("Logout Failed: \(error)")
    }
}

# 現在のアクセストークンを取得する

# 以前

var apiClient: LineSDKAPI
apiClient = LineSDKAPI(configuration: LineSDKConfiguration.defaultConfig())

let myToken = apiClient.currentAccessToken()

# 現在

let token = AccessTokenStore.shared.current?.value

# アクセストークンを検証する

# 以前

var apiClient: LineSDKAPI
apiClient = LineSDKAPI(configuration: LineSDKConfiguration.defaultConfig())

apiClient.verifyToken(queue: .main) {
    (result, error) in
    
    if let error = error {
        print("Token is Invalid: \(error.localizedDescription)")
        return
    }
    
    guard let result = result, let permissions = result.permissions else {
        print("Response result is null")
        return
    }
    print("Token is Valid")
}

# 現在

API.Auth.verifyAccessToken { result in
    switch result {
    case .success: print("Token is valid.")
    case .failure(let error): print("Error: \(error)")
    }
}