🐛

Embedded Framework で Xcode Previews が動作しない時の対処法

2021/03/10に公開

起きていた問題

  • Embedded Framework で Carthage や CocoaPods を利用してライブラリを導入していました
  • その状態で Xcode Previews を開こうとすると Library not loaded というエラーが発生し、Previews が開けない状態になっていました(自分の環境は Xcode 12.4)

問題の原因

  • LD_RUNPATH_SEARCH_PATHS に ライブラリの Path が含まれていないことが原因(以前まで動作していたのか定かではないですが Xcode のバグっぽい雰囲気もあります)

解決方法

CocoaPods の場合

https://github.com/CocoaPods/CocoaPods/issues/9275
で議論されていますが、以下のような workaround を Podfile に対して適用すれば解決することができました。

class Pod::Target::BuildSettings::AggregateTargetSettings
    alias_method :ld_runpath_search_paths_original, :ld_runpath_search_paths

    def ld_runpath_search_paths
        return ld_runpath_search_paths_original unless configuration_name == "Debug"
        return (ld_runpath_search_paths_original || []) + (framework_search_paths || [])
    end
end

class Pod::Target::BuildSettings::PodTargetSettings
    alias_method :ld_runpath_search_paths_original, :ld_runpath_search_paths

    def ld_runpath_search_paths
        return (ld_runpath_search_paths_original || []) + (framework_search_paths || [])
    end
end

上記を Podfile に追加することで pod install 時、自動的に LD_RUNPATH_SEARCH_PATHS に CocoaPods で導入しているライブラリの Path が追加されました。

Carthage の場合

https://github.com/Carthage/Carthage/issues/2928
で yonaskolb さんが自己解決されていますが、 $(PROJECT_DIR)/Carthage/Build/iOSLD_RUNPATH_SEARCH_PATHS (Xcode 上では RunPath Search Paths)に追加すれば解決できました

Discussion