Xcodeでの非推奨関数プロトタイプエラーの解決法
エラー概要
Firebase Analyticsを含むiOSプロジェクトをXcodeでビルド中に次のエラーが発生します:
error
A function declaration without a prototype is deprecated in all versions of Cこのエラーは主にGoogleDataTransportライブラリの次の関数定義で発生します:
objc
GDTCORNetworkType GDTCORNetworkTypeMessage() { // ← ここでエラー
#if !TARGET_OS_WATCH
SCNetworkReachabilityFlags reachabilityFlags = [GDTCORReachability currentFlags];
if ((reachabilityFlags & kSCNetworkReachabilityFlagsReachable) ==
kSCNetworkReachabilityFlagsReachable) {
if (GDTCORReachabilityFlagsContainWWAN(reachabilityFlags)) {
return GDTCORNetworkTypeMobile;
} else {
return GDTCORNetworkTypeWIFI;
}
}
#endif
return GDTCORNetworkTypeUNKNOWN;
}エラー原因は関数定義内の()がプロトタイプを指定していないK&Rスタイル関数宣言を使用しているためです。これはC言語標準で非推奨となっています。
解決方法(3つのアプローチ)
推奨アプローチ
プロジェクト規模やポリシーに応じて最適な方法を選択してください。方法1か方法2が恒久的な解決策として推奨されます。
方法1: Build Settingの変更(Xcode UI操作)
- Xcodeでプロジェクトを開く
- ナビゲータから
Podsプロジェクトを選択 - ターゲット一覧から
GoogleDataTransportを選択- 複数バージョンがある場合は全てのGoogleDataTransport関連ターゲットを修正
- Build Settingsタブを開く
- 検索ボックスに
strict prototypesと入力 - Strict Prototyping設定をNOに変更

複数ターゲットがある場合
GoogleDataTransport-CoreOnlyやGoogleDataTransport-fooなどの関連ターゲット全てに同じ設定を適用してください。
plaintext
Targets:
- GoogleDataTransport
- GoogleDataTransport-foo (バージョン依存)
- GoogleDataTransport-bar方法2: Podfile設定(自動化推奨)
Podfileにpost_installフックを追加してビルド設定を自動変更:
ruby
post_install do |installer|
# React Native固有の設定がある場合はそのまま保持
react_native_post_install(installer) if defined?(react_native_post_install)
installer.pods_project.targets.each do |target|
# GoogleDataTransport関連ターゲットを特定
if target.name.start_with? "GoogleDataTransport"
target.build_configurations.each do |config|
config.build_settings['CLANG_WARN_STRICT_PROTOTYPES'] = 'NO'
end
end
end
end適用手順:
Podfileを編集して上記コードを追加- ターミナルでコマンド実行:
bash
pod install既存のpost_installフックがある場合
既存のpost_installブロックがある場合はマージしてください。例:
ruby
post_install do |installer|
# 既存の設定...
__apply_Xcode_12_5_M1_post_install_workaround(installer)
# ここにGoogleDataTransport用設定を追加...
end方法3: ソースコード直接修正(一時的対策)
objc
GDTCORNetworkType GDTCORNetworkTypeMessage(void) { // voidを追加
// ...既存の実装
}修正手順:
- エラー発生箇所をダブルクリック
- Xcodeが提案する「Fix」ボタンをクリック
- ファイルがロックされている場合は「Unlock」を選択
- 全エラー箇所に対して繰り返し適用
:::caution 注意点
- 3rdパーティライブラリを直接修正するとpod update時に変更が上書きされます
- 恒久的な解決策ではないため方法1/2が推奨
- 複数ファイルで同様のエラーが発生する可能性あり :::
技術的背景説明
エラーの根本原因
C言語では歴史的な理由で2種類の関数宣言が存在します:
c
// 非推奨: 引数情報がないK&Rスタイル
return_type function()
// 推奨: 明示的にvoidを指定
return_type function(void)新しいCコンパイラは前者をstrict-prototypes違反とみなし警告を発生させます。
影響範囲
- 環境: Xcode 14.0+ (特にApple Clang 15)
- 対象ライブラリ: GoogleDataTransport v9.2.0以前
将来の見通し
- C23標準で
function()がfunction(void)と同等に扱われるよう改訂 - GoogleDataTransportの新版では既に修正済み
- 長期的には
pod updateだけで解決可能に
最終推奨
方法2のPodfile設定が最適解です。理由:
- ライブラリ更新時に設定が維持される
- プロジェクト全体に影響しない
- ソース修正より安全
- チームメンバー全員に統一設定を適用可能