shiguredo / sora-ios-sdk

WebRTC SFU Sora iOS SDK
https://sora-ios-sdk.shiguredo.jp/
Apache License 2.0
42 stars 8 forks source link

Releaseビルドができない問題とその解決方法 #50

Closed FromAtom closed 3 years ago

FromAtom commented 3 years ago

環境

発生する問題(簡易)

CocoaPods経由でshiguredo/sora-ios-sdkを導入した場合、Releaseビルドが通らないためアーカイブができずAppStoreConnectへのバイナリアップデートなどができない。

発生する問題(詳細)

shiguredo/sora-ios-sdk はarm64のアーキテクチャのみをサポートしていますが、CocoaPods経由でライブラリを導入した場合、Build SettingsにおけるARCHS指定が $(ARCHS_STANDARD) となるため、armv7がビルド対象に含まれてしまいます。これはDebugビルドでは問題ないですが、Releaseビルドの際にWebRTCをarmv7用のビルドも試みてしまうためエラーになります。

この問題はライブラリを利用するアプリ自体の ARCHS 指定を変えても対応ができず、WebRTCへの依存を持っているPods内に含まれるSora自体のBuild Settingsの ARCHS を変更する必要があります。

結果として、CocoaPods経由で導入した shiguredo/sora-ios-sdk は、ライブラリ利用ユーザーの手元でなにかしらの対応を行わないと、Releaseビルドができない状態になっています。

対応方法

A, B, Cの3パターンの対応方法があります。

A. 利用者の手元で対応する方法(Podfileの場合)

下記のようにPodfileに処理を追記することで対応が可能です。

source 'https://github.com/shiguredo/sora-ios-sdk-specs.git'
source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '13.0'

target 'sora-test' do
  use_frameworks!

  pod 'Sora', '2020.7'
end

# 問題に対応する処理
post_install do |installer|
  installer.pods_project.targets.each do |target|
    next unless target.name == 'Sora' # => 他のライブラリにこの設定は不要
    target.build_configurations.each do |config|
      next unless config.name == 'Release' # => Releaseビルドのみにしないと、シミュレーターでDebugビルドできない
      config.build_settings["ARCHS"] = "arm64"
    end
  end
end

B. 利用者の手元で対応する方法(.podspecの場合)

ローカルに Sora.podspec といったファイルを作成し、下記の内容を書き込みます。

Pod::Spec.new do |s|
    s.name         = "Sora"
    s.version      = "2020.7"
    s.summary      = "Sora iOS SDK"
    s.description  = <<-DESC
                        A library to develop Sora client applications.
                        DESC
    s.homepage     = "https://github.com/shiguredo/sora-ios-sdk"
    s.license      = { :type => "Apache License, Version 2.0" }
    s.authors      = { "Shiguredo Inc." => "sora@shiguredo.jp" }
    s.platform     = :ios, "10.0"
    s.source       = {
        :git => "https://github.com/shiguredo/sora-ios-sdk.git",
        :tag => s.version
    }
    s.source_files  = "Sora/**/*.swift"
    s.resources = ['Sora/info.json', 'Sora/*.xib']
    s.prepare_command = 'sh Sora/info.sh'
    s.dependency "WebRTC", '86.4240.10.0'
    s.dependency "Starscream", "3.1.1"

    # 問題に対応する処理
    s.pod_target_xcconfig = {
        'ARCHS' => 'arm64',
        'ARCHS[config=Debug]' => '$(ARCHS_STANDARD)'
    }
end

Podfile は下記のように記載します。

source 'https://github.com/shiguredo/sora-ios-sdk-specs.git'
source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '13.0'

target 'sora-test' do
  use_frameworks!

  pod 'Sora', podspec: 'Sora.podspec'
end

C. 時雨堂さん側で対応する方法

https://github.com/shiguredo/sora-ios-sdk-specs で公開されている Sora.podspec

s.pod_target_xcconfig = {
    'ARCHS' => 'arm64',
    'ARCHS[config=Debug]' => '$(ARCHS_STANDARD)'
}

の設定を追記することで対応可能です。なお 'ARCHS[config=Debug]' => '$(ARCHS_STANDARD)' の記載はシミュレーターでもビルドが可能(もちろん利用は不可)になるために必要です。

次回以降のバージョンでこちらの設定が追加されると、手元で対応処理を書く必要がなくなるため、大変助かります。

voluntas commented 3 years ago

@FromAtom いつも素晴らしいフィードバックをありがとうございます、大変助かります。実は Issue を立てる前に Discord で連絡を頂くというルールがあるのですが(よくわからない Issue が増えてきて去年追加したルールです)、今後も特に気にせず Issue / PR 立てていたただいて問題ありません。こちら、対応させて頂きます。

FromAtom commented 3 years ago

実は Issue を立てる前に Discord で連絡を頂くというルールがある

なるほどそういったルールがあったのですね。確認不足で大変失礼いたしました。もしまたIssue / PRを作ることがありましたら、Discordにて相談させていただきますので、よろしくお願いいたします。

miosakuma commented 3 years ago

@FromAtom 本日リリースした iOS SDK 2021.1 より Sora.podspec にご報告いただいた設定を追加しております。 ご確認くださいませ。

フィードバック、まことにありがとうございました。

FromAtom commented 3 years ago

@miosakuma ご対応いただき、まことにありがとうございます。