Xcode 7 neden * .dylib yerine * .tbd gösteriyor?


138

Xcode 7 Hedefte> BuildPhases> İkili Kitaplıklarıyla Bağla> + düğmesine dokunun

Eklenecek çerçeveleri seçerken * .dylib bulamazsınız, bunun yerine * .tbd görürsünüz.

Bunun nedeni nedir?

** dylib gerek insan için, bundan izleyin yazı

  1. "Başka ekle" yi seçin
  2. Dosya seçim penceresine girdikten sonra "CMD" + Shift + G (Klasöre git) ve / usr / lib / yazın
  3. / User / lib dizininden * .dylib dosyalarını bulabilirsiniz

11
Hepsi Elma "gizli planının" bir parçası ...
l'L'l

/ usr / lib / 'dan * .dylib ekleyerek Bu sadece benim app simülatörde çalışırken benim için çalışıyor, cihaz ile çalışmıyor.
keshav vishwkarma

Yanıtlar:


153

Google'ı inceledim, ancak şu ana kadar bulabildiğim tek şey Apple geliştirici forumlarından aşağıdaki alıntı :

Merak edenler için .tbd dosyaları, SDK'da kullanım için saplama kitaplıklarının çok daha kompakt bir sürümünü sağlayan ve indirme boyutunu önemli ölçüde azaltmaya yardımcı olan yeni "metin tabanlı saplama kitaplıkları" dır.

Umarım yakında daha fazla dokümantasyon gelecek.

Güncelleme

Örnek olarak, libsqlite3.tbd'ün tüm içeriği . Sadece bir metin dosyası. Kuruluş adının libsqlite3.dylib olduğunu unutmayın .

---
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 ]
...

Bunu ve diğer .tbd dosyalarını

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

Ayrıca, Xcode projenizin Genel sekmesine gidip Bağlantılı Çerçeveler ve Kütüphaneler altında bir kitaplık eklerseniz bir .tbd dosyası da görebilirsiniz. .Tbd dosyası projenize kopyalanacaktır.

Bu nedenle, .dylib dosyasının projenizin kullandığı ikili kodun gerçek kütüphanesi olduğu ve kullanıcının cihazındaki / usr / lib / dizininde bulunduğu anlaşılıyor. Öte yandan, .tbd dosyası sadece projenize dahil olan ve gerekli .dylib ikili dosyasına bir bağlantı görevi gören bir metin dosyasıdır. Bu metin dosyası ikili kitaplıktan çok daha küçük olduğundan, SDK'nın indirme boyutunu küçültür.

Bu noktada sadece verilen bilgilerden eminim, bu yüzden lütfen yanılıyorsam beni düzeltin.


3
TBD dosya biçimi aslında sadece bir YAML dosyasıdır. Bağlayıcı yalnızca belirli etiketleri arar.
C0deH4cker

5
Uygulama boyutunu neden daha küçük yapıyor? Sadece derleme / bağlantı zamanında gerçek dylib ile bağlantı kurmuyor mu? Yanlış olduğunu söylemiyorum, sadece anlamaya çalışıyorum
stonedauwg

3
Oluşturduğunuz uygulamanın boyutunu değil, Xcode ile indirdiğiniz SDK'nın boyutunu azaltır.
Joky

Teşekkürler @Joky. Cevabımdaki hatayı düzelttim. SDK'da bulunmuyorlarsa ikili dosyaların uygulamaya hangi noktada eklendiğini biliyor musunuz? Ve nereden geliyorlar? Hangi .tbd dosyalarının kullanıldığına bağlı olarak gerektiğinde indiriliyor mu?
17'de Suragch

5
SDK'daki dylibs, işletim sistemi yüklendiğinde aygıtta bulunur. Bu nedenle, SDK'da işe yaramazlar, ancak uygulamayı bağladığınızda bağlayıcının işini yapmasına izin vermek için (dinamik kütüphaneler uygulamaya kopyalanmaz ve ayrı kalır). Bu nedenle, tbd dosyalarıyla yapılan değişiklik, dylib'i yalnızca bağlayıcı tarafından kullanılan minimum bilgi miktarını koruyarak ve bu yeni formatı anlamak için bağlayıcıyı güncellemektir.
Şaka

22

.dylib, makine kodunu içeren derlenmiş ikili dosyadır. .tbd, platformlar arası modül eşlemesine benzer daha küçük bir metin dosyasıdır.


8
Bunu nereden öğrendin? Bununla ilgili daha fazla araştırma yapabileceğim herhangi bir bağ var mı?
Suragch

2
sadece bir .tds içeriğine bakın
Peter Lapisu

6
Bir .tds dosyası bir .tdb dosyası ile aynı mı? İçeriğine bakmak için böyle bir dosyayı nerede bulabilirim?
Suresi

7
TDS veya TDB değil TBD. Metin tabanlı dylib tanımı anlamına gelir.
craig65535

4

.tbd- Text Based dylib stubs. Bu bir tür optimizasyondur, yani bir .dylibdosyayı (hedefte bulunan) paketinize (örneğin uygulama) kopyalamanız gerekmez . Bu dosya, dosya boyutu üzerinde büyük etkisi olan ikili kodu içermiyor.

Sadece şunlar için geçerlidir:

  1. Dynamic libraries çünkü çalışma zamanı bağlantılı
  2. Dosyanın hedef üzerinde alakalı bir yolu olmalıdır. Sonuç olarak en iyi yer standard system libraries.

İOS geliştirme için burada kullanabileceğiniz .tbd dosyalarını bulabilirsiniz

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

Örneğin libiconv.tbd,

resim açıklamasını buraya girin

Bu dosya aşağıdaki gibi bazı meta bilgileri içerir:

  • .dylib yer
  • semboller (sınıfın özellikleri, yöntemleri)
  • mimari
  • platform

1
yöntem bildirimleri içermez. Yalnızca sınıfların adları ve serbest işlevlerin adları kitaplıktan dışa aktarılır.
Anton Kukoba
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.