Xcode 7が* .dylibではなく* .tbdを表示するのはなぜですか?


138

Xcode 7 In Target> BuildPhases> Link Binary With Libraries> Tap + button

追加するフレームワークを選択すると、*。dylibが見つかりません。代わりに* .tbdが表示されます。

これの理由は何ですか?

** dylibが必要な人は、この投稿からフォローしてください

  1. 「他を追加」を選択します
  2. ファイル選択ウィンドウに入ったら、「CMD」+ Shift + G(フォルダーに移動)を実行し、/ usr / lib /と入力します。
  3. / user / libから* .dylibファイルを見つけることができます

11
それはすべてAppleの「秘密の計画」の一部です...
l'L'l

/ usr / lib /から* .dylibを追加するこれは、シミュレーターでアプリを実行しているときにのみ機能し、デバイスでは機能しません。
keshav vishwkarma

回答:


153

私はグーグルを精査しましたが、今のところ私が見つけることができる唯一のものは、アップル開発者フォーラムからの以下の引用です

気になる人のために、.tbdファイルは新しい「テキストベースのスタブライブラリ」であり、SDKで使用するスタブライブラリのはるかにコンパクトなバージョンを提供し、ダウンロードサイズを大幅に削減するのに役立ちます。

うまくいけば、より多くのドキュメントがすぐに来るでしょう。

更新

例として、ここにlibsqlite3.tbdの内容全体を示します。これは単なるテキストファイルです。インストール名はlibsqlite3.dylibであることに注意してください。

---
archs:           [ armv7, armv7s, arm64 ]
platform:        ios
install-name:    /usr/lib/libsqlite3.dylib
current-version: 216.4
compatibility-version: 9.0
exports:         
  - archs:           [ armv7, armv7s, arm64 ]
    symbols:         [ __sqlite3_lockstate, __sqlite3_purgeEligiblePagerCacheMemory, 
                       __sqlite3_system_busy_handler, __sqlite_auto_profile, 
                       __sqlite_auto_profile_syslog, __sqlite_auto_trace, 
                       __sqlite_auto_trace_syslog, _sqlite3OsShmHasMultipleLinks, 
                       _sqlite3OsShmRenamedWhileOpen, _sqlite3OsShmWasTruncated, 
                       _sqlite3OsShmWasUnlinkedWhileOpen, _sqlite3VersionNumber, 
                       _sqlite3VersionString, _sqlite3_aggregate_context, 
                       _sqlite3_aggregate_count, _sqlite3_auto_extension, 
                       _sqlite3_backup_finish, _sqlite3_backup_init, _sqlite3_backup_pagecount, 
                       _sqlite3_backup_remaining, _sqlite3_backup_step, 
                       _sqlite3_bind_blob, _sqlite3_bind_blob64, _sqlite3_bind_double, 
                       _sqlite3_bind_int, _sqlite3_bind_int64, _sqlite3_bind_null, 
                       _sqlite3_bind_parameter_count, _sqlite3_bind_parameter_index, 
                       _sqlite3_bind_parameter_name, _sqlite3_bind_text, 
                       _sqlite3_bind_text16, _sqlite3_bind_text64, _sqlite3_bind_value, 
                       _sqlite3_bind_zeroblob, _sqlite3_blob_bytes, _sqlite3_blob_close, 
                       _sqlite3_blob_open, _sqlite3_blob_read, _sqlite3_blob_reopen, 
                       _sqlite3_blob_write, _sqlite3_busy_handler, _sqlite3_busy_timeout, 
                       _sqlite3_cancel_auto_extension, _sqlite3_changes, 
                       _sqlite3_clear_bindings, _sqlite3_close, _sqlite3_close_v2, 
                       _sqlite3_collation_needed, _sqlite3_collation_needed16, 
                       _sqlite3_column_blob, _sqlite3_column_bytes, _sqlite3_column_bytes16, 
                       _sqlite3_column_count, _sqlite3_column_decltype, 
                       _sqlite3_column_decltype16, _sqlite3_column_double, 
                       _sqlite3_column_int, _sqlite3_column_int64, _sqlite3_column_name, 
                       _sqlite3_column_name16, _sqlite3_column_text, _sqlite3_column_text16, 
                       _sqlite3_column_type, _sqlite3_column_value, _sqlite3_commit_hook, 
                       _sqlite3_compileoption_get, _sqlite3_compileoption_used, 
                       _sqlite3_complete, _sqlite3_complete16, _sqlite3_config, 
                       _sqlite3_context_db_handle, _sqlite3_create_collation, 
                       _sqlite3_create_collation16, _sqlite3_create_collation_v2, 
                       _sqlite3_create_function, _sqlite3_create_function16, 
                       _sqlite3_create_function_v2, _sqlite3_create_module, 
                       _sqlite3_create_module_v2, _sqlite3_data_count, 
                       _sqlite3_data_directory, _sqlite3_db_config, _sqlite3_db_filename, 
                       _sqlite3_db_handle, _sqlite3_db_mutex, _sqlite3_db_readonly, 
                       _sqlite3_db_release_memory, _sqlite3_db_status, 
                       _sqlite3_declare_vtab, _sqlite3_enable_shared_cache, 
                       _sqlite3_errcode, _sqlite3_errmsg, _sqlite3_errmsg16, 
                       _sqlite3_errstr, _sqlite3_exec, _sqlite3_expired, 
                       _sqlite3_extended_errcode, _sqlite3_extended_result_codes, 
                       _sqlite3_file_control, _sqlite3_finalize, _sqlite3_free, 
                       _sqlite3_free_table, _sqlite3_get_autocommit, _sqlite3_get_auxdata, 
                       _sqlite3_get_table, _sqlite3_global_recover, _sqlite3_initialize, 
                       _sqlite3_intarray_bind, _sqlite3_intarray_create, 
                       _sqlite3_interrupt, _sqlite3_last_insert_rowid, 
                       _sqlite3_libversion, _sqlite3_libversion_number, 
                       _sqlite3_limit, _sqlite3_log, _sqlite3_malloc, _sqlite3_malloc64, 
                       _sqlite3_memory_alarm, _sqlite3_memory_highwater, 
                       _sqlite3_memory_used, _sqlite3_mprintf, _sqlite3_msize, 
                       _sqlite3_mutex_alloc, _sqlite3_mutex_enter, _sqlite3_mutex_free, 
                       _sqlite3_mutex_leave, _sqlite3_mutex_try, _sqlite3_next_stmt, 
                       _sqlite3_open, _sqlite3_open16, _sqlite3_open_v2, 
                       _sqlite3_os_end, _sqlite3_os_init, _sqlite3_overload_function, 
                       _sqlite3_prepare, _sqlite3_prepare16, _sqlite3_prepare16_v2, 
                       _sqlite3_prepare_v2, _sqlite3_profile, _sqlite3_progress_handler, 
                       _sqlite3_randomness, _sqlite3_realloc, _sqlite3_realloc64, 
                       _sqlite3_release_memory, _sqlite3_reset, _sqlite3_reset_auto_extension, 
                       _sqlite3_result_blob, _sqlite3_result_blob64, _sqlite3_result_double, 
                       _sqlite3_result_error, _sqlite3_result_error16, 
                       _sqlite3_result_error_code, _sqlite3_result_error_nomem, 
                       _sqlite3_result_error_toobig, _sqlite3_result_int, 
                       _sqlite3_result_int64, _sqlite3_result_null, _sqlite3_result_text, 
                       _sqlite3_result_text16, _sqlite3_result_text16be, 
                       _sqlite3_result_text16le, _sqlite3_result_text64, 
                       _sqlite3_result_value, _sqlite3_result_zeroblob, 
                       _sqlite3_rollback_hook, _sqlite3_rtree_geometry_callback, 
                       _sqlite3_rtree_query_callback, _sqlite3_set_authorizer, 
                       _sqlite3_set_auxdata, _sqlite3_shutdown, _sqlite3_sleep, 
                       _sqlite3_snprintf, _sqlite3_soft_heap_limit, _sqlite3_soft_heap_limit64, 
                       _sqlite3_sourceid, _sqlite3_sql, _sqlite3_status, 
                       _sqlite3_status64, _sqlite3_step, _sqlite3_stmt_busy, 
                       _sqlite3_stmt_readonly, _sqlite3_stmt_status, _sqlite3_strglob, 
                       _sqlite3_stricmp, _sqlite3_strnicmp, _sqlite3_table_column_metadata, 
                       _sqlite3_temp_directory, _sqlite3_test_control, 
                       _sqlite3_thread_cleanup, _sqlite3_threadsafe, _sqlite3_total_changes, 
                       _sqlite3_trace, _sqlite3_transfer_bindings, _sqlite3_update_hook, 
                       _sqlite3_uri_boolean, _sqlite3_uri_int64, _sqlite3_uri_parameter, 
                       _sqlite3_user_data, _sqlite3_value_blob, _sqlite3_value_bytes, 
                       _sqlite3_value_bytes16, _sqlite3_value_double, _sqlite3_value_int, 
                       _sqlite3_value_int64, _sqlite3_value_numeric_type, 
                       _sqlite3_value_text, _sqlite3_value_text16, _sqlite3_value_text16be, 
                       _sqlite3_value_text16le, _sqlite3_value_type, _sqlite3_version, 
                       _sqlite3_vfs_find, _sqlite3_vfs_register, _sqlite3_vfs_unregister, 
                       _sqlite3_vmprintf, _sqlite3_vsnprintf, _sqlite3_vtab_config, 
                       _sqlite3_vtab_on_conflict, _sqlite3_wal_autocheckpoint, 
                       _sqlite3_wal_checkpoint, _sqlite3_wal_checkpoint_v2, 
                       _sqlite3_wal_hook ]
...

私はこれと他の.tbdファイルを見つけました

Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/

Xcodeプロジェクトの[全般]タブに移動し、[リンクフレームワークとライブラリ]でライブラリを追加すると、.tbdファイルも表示されます。.tbdファイルがプロジェクトにコピーされます。

したがって、.dylibファイルは、プロジェクトが使用している実際のバイナリコードのライブラリであり、ユーザーのデバイスの/ usr / lib /ディレクトリにあるようです。一方、.tbdファイルは、プロジェクトに含まれているテキストファイルであり、必要な.dylibバイナリへのリンクとして機能します。このテキストファイルはバイナリライブラリよりもはるかに小さいため、SDKのダウンロードサイズが小さくなります。

現時点で私は与えられた情報から推測しているだけなので、間違っている場合は訂正してください。


3
TBDファイル形式は、実際には単なるYAMLファイルです。リンカは特定のタグを探すだけです。
C0deH4cker 2016年

5
なぜアプリのサイズが小さくなるのですか?コンパイル/リンク時にとにかく実際のdylibにリンクしませんか?ただ理解しようと、あなたにしている間違ったことを言っていない
stonedauwg

3
Xcodeを使用してダウンロードするSDKのサイズは縮小されますが、構築しているアプリのサイズは縮小されません。
Joky

ありがとう、@ Joky。回答の誤りを訂正しました。バイナリがSDKにない場合、バイナリがどの時点でアプリに追加されるか知っていますか?そして、彼らはどこから来たのですか?使用する.tbdファイルに応じて、必要に応じてダウンロードされますか?
Suragch 2017年

5
SDKのdylibは、OSのインストール時にデバイスに存在します。そのため、それらはSDKでは役に立たなかったが、アプリをリンクしたときにリンカーがその機能を実行できるようにしました(動的ライブラリはアプリにコピーされず、分離されたままになります)。したがって、tbdファイルでの変更は、リンカによって使用された最小量の情報のみを保持してdylibを削除し、この新しい形式を理解するようにリンカを更新することです。
Joky

22

.dylibは、マシンコードを含むコンパイル済みバイナリです。.tbdは、クロスプラットフォームモジュールマップに似た、より小さなテキストファイルです。


8
どこでこれを学びましたか?これについてもっと研究できるリンクはありますか?
Suragch、2015年

2
.tdsの内容を確認してください
Peter Lapisu

6
.tdsファイルは.tdbファイルと同じですか?内容を確認するために、そのようなファイルはどこにありますか?
Suragch、2015

7
TDSやTDBではなく、TBDです。テキストベースのdylib定義を表します。
craig65535 2017

4

.tbd- Text Based dylib stubs。これは一種の最適化であり、.dylibファイル(ターゲット上に存在する)をバンドル(アプリケーションなど)にコピーする必要はありません。このファイルには、ファイルサイズに大きな影響を与えるバイナリコードは含まれていません。

以下にのみ適用されます。

  1. Dynamic libraries ランタイムにリンクされているため
  2. ファイルには、ターゲット上の関連パスが必要です。その結果、それはのための最高の場所ですstandard system libraries

iOS開発の場合、ここで使用できる.tbdファイルを見つけることができます

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib

たとえばlibiconv.tbd次のようになります

ここに画像の説明を入力してください

このファイルには、次のようなメタ情報が含まれています。

  • .dylib ロケーション
  • シンボル(クラスのプロパティ、メソッド)
  • 建築
  • プラットホーム

1
メソッド宣言は含まれていません。ライブラリからエクスポートされたクラスの名前とフリー関数の名前のみ。
アントンココバ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.