Mengapa Xcode 7 menampilkan * .tbd daripada * .dylib?

140

Xcode 7 Dalam Target> BuildPhases> Link Binary With Libraries> tekan tombol +

Saat memilih kerangka kerja untuk ditambahkan, Anda tidak dapat menemukan * .dylib, Anda akan melihat * .tbd sebagai gantinya.

Apa alasannya ini?

** Untuk orang yang membutuhkan dylib, ikuti dari postingan ini

  1. Pilih "Tambahkan lainnya"
  2. Setelah berada di jendela pemilihan file, lakukan "CMD" + Shift + G (Buka folder) & ketik / usr / lib /
  3. Dari / user / lib Anda dapat menemukan file * .dylib
Ted
sumber
12
Itu semua adalah bagian dari "rencana rahasia" Apel ...
l'l
menambahkan * .dylib dari / usr / lib / Ini hanya berfungsi untuk saya saat menjalankan aplikasi saya di simulator, ini tidak berfungsi dengan perangkat.
keshav vishwkarma

Jawaban:

153

Saya telah menjelajahi Google tetapi satu-satunya hal yang dapat saya temukan sejauh ini adalah kutipan berikut dari forum pengembang Apple :

Bagi mereka yang penasaran, file .tbd adalah "pustaka rintisan berbasis teks" baru, yang menyediakan versi pustaka rintisan yang jauh lebih ringkas untuk digunakan dalam SDK, dan membantu mengurangi ukuran unduhan secara signifikan.

Semoga lebih banyak dokumentasi akan segera hadir.

Memperbarui

Sebagai contoh, berikut adalah seluruh konten libsqlite3.tbd . Ini hanya file teks. Perhatikan bahwa nama-instal adalah 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 ]
...

Saya menemukan ini dan file .tbd lainnya di

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

Anda juga bisa melihat file .tbd jika Anda pergi ke tab umum proyek Xcode Anda dan kemudian menambahkan pustaka di bawah kerangka kerja dan pustaka tertaut. File .tbd akan disalin ke proyek Anda.

Jadi, tampaknya file .dylib adalah pustaka kode biner sebenarnya yang digunakan proyek Anda dan terletak di direktori / usr / lib / pada perangkat pengguna. File .tbd, di sisi lain, hanyalah file teks yang disertakan dalam proyek Anda dan berfungsi sebagai link ke biner .dylib yang diperlukan. Karena file teks ini jauh lebih kecil daripada pustaka biner, itu membuat ukuran unduhan SDK lebih kecil.

Pada titik ini saya hanya menduga dari informasi yang diberikan, jadi mohon koreksi saya jika saya salah.

Suragch
sumber
4
Format file TBD sebenarnya hanya file YAML. Linker hanya mencari tag tertentu.
C0deH4cker
5
Mengapa itu membuat ukuran aplikasi lebih kecil? Bukankah itu hanya menautkan ke dylib yang sebenarnya pada saat kompilasi / tautan? Tidak mengatakan Anda salah, hanya mencoba untuk memahami
stonedauwg
3
Ini mengurangi ukuran SDK yang Anda unduh dengan Xcode, bukan ukuran aplikasi yang Anda buat.
Joky
Terima kasih, @Joky. Saya mengoreksi kesalahan dalam jawaban saya. Apakah Anda tahu kapan binari ditambahkan ke aplikasi jika tidak ada di SDK? Dan dari mana asalnya? Apakah mereka diunduh sesuai kebutuhan tergantung pada file .tbd apa yang digunakan?
Suragch
5
Dylib di SDK ada di perangkat saat OS diinstal. Jadi mereka tidak berguna di SDK, tetapi untuk memungkinkan penaut melakukan tugasnya saat Anda menautkan aplikasi (pustaka dinamis tidak disalin ke dalam aplikasi dan tetap terpisah). Jadi perubahan dengan file tbd adalah menghapus dylib dengan hanya menyimpan sejumlah informasi minimum yang digunakan oleh linker, dan memperbarui linker untuk memahami format baru ini.
Joky
22

.dylib adalah biner terkompilasi yang berisi kode mesin. .tbd adalah file teks yang lebih kecil, mirip dengan peta modul lintas platform.

Peter Lapisu
sumber
8
Di mana Anda mempelajari ini? Apakah Anda memiliki tautan yang dapat saya teliti lebih lanjut tentang ini?
Suragch
2
lihat saja konten dari .tds
Peter Lapisu
6
Apakah file .tds sama dengan file .tdb? Di mana saya dapat menemukan file seperti itu untuk melihat isinya?
Suragch
7
Ini TBD, bukan TDS atau TDB. Ini adalah singkatan dari definisi dylib berbasis teks.
craig65535
4

.tbd- Text Based dylib stubs. Ini adalah jenis pengoptimalan yang berarti Anda tidak perlu menyalin .dylibfile (yang ada pada target) ke dalam bundel Anda (misalnya aplikasi). File ini tidak mengandung kode biner yang berdampak besar pada ukuran file.

Ini hanya berlaku untuk:

  1. Dynamic libraries karena mereka terhubung dengan runtime
  2. File harus memiliki jalur yang relevan pada target. Hasilnya, ini adalah tempat terbaik untuk standard system libraries.

Untuk pengembangan iOS Anda dapat menemukan file .tbd yang dapat Anda gunakan di sini

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

Misalnya libiconv.tbdterlihat seperti

masukkan deskripsi gambar di sini

File ini berisi beberapa informasi meta seperti:

  • .dylib lokasi
  • simbol (properti kelas, metode)
  • Arsitektur
  • peron
yoAlex5
sumber
1
itu tidak berisi deklarasi metode. Hanya nama kelas dan nama fungsi bebas yang diekspor dari perpustakaan.
Anton Kukoba