2017-12-14 15 views
1

Xcode 9.2でビルドする場合、xcodebuildで生成されるバイナリは、Xcodeの通常の「ビルド用プロファイリング」コマンドよりもわずかに大きくなります。両方ともリリースビルドを生成するように設定されている場合、コマンドラインビルドの設定も 'リリース'に設定されていますが、これは以前のバージョンのXcodeでは発生しませんでした。 Xcodeの中から構築するときXcode 9.2:Xcode内のリリースビルドとxcodebuildを使用した場合のサイズの差異

これらは、それぞれのサイズのフレームワークです:

enter image description here

そして、これらはxcodebuildによって生成されます。

enter image description here

私はいくつかのデバッグやコードのことを疑いますxcodebuildを使用すると、一部のフレームワークでカバレッジデータが残されます。

FYI:以前のビルドでは、より大きなCバイナリがありました(たとえば、sqlite3.frameworkは数メガバイトでした)。 https://github.com/Carthage/Carthage/issues/2056を発見した後、私はビルドスキームの 'Test'アクションでコードカバレッジを無効にし、 "Undefined Behavior"サニタイザを無効にしました。その前に、フレームワークは(再び、ノートsqlite3.framework)にも大きかったし、リリースに存在してはならないどの消毒剤「未定義の動作」からdylibがあったのビルド:

enter image description here

でした誰の出会いを似たようなことや、この問題を解決できましたか?例えば、 nmまたはotoolの場合は役立ちます(また、意味のある情報を生成するためにこれらのツールに渡すオプションを教えてください)。

PS: 私はxcodebuildために、このコマンドを使用しています:

xcodebuild -workspace Timing.xcworkspace -scheme 'Timing 2' -configuration 'Release' -derivedDataPath build clean build 

を私はパラレル

defaults write com.apple.dt.Xcode BuildSystemScheduleInherentlyParallelCommandsExclusively -bool NO 

を構築し、新しいXcodeのビルドシステムを使用しています、しかし問題も表示されます可能でした「通常の」ビルド設定を使用します。さらに、Xcodeのビルドステップの出力と、いずれの場合もxcodebuildの出力に違いはありません。また、sqlite3.frameworkはCocoaPodsを介して構築されていますが、それは問題ではありません。

答えて

0

xcodebuildのために追加されたコードカバレッジデータが、コンパイラオプション-profile-generate -profile-coverage-mappingを追加したように見えます。 xcodebuildがテスト用に構築されていない場合でも、「解決策」は、「テスト」スキームアクションで「カバレッジデータを収集する」オプションのチェックを外すことでした。

関連する問題