ทำไม Xcode 7 จึงแสดง * .tbd แทนที่จะเป็น * .dylib


138

Xcode 7 อยู่ในเป้าหมาย> BuildPhases> เชื่อมโยงไบนารีด้วยไลบรารี> แตะปุ่ม

เมื่อเลือกเฟรมเวิร์กที่จะเพิ่มคุณจะไม่พบ * .dylib คุณจะเห็น * .tbd แทน

อะไรคือสาเหตุของสิ่งนี้?

** สำหรับผู้ที่ต้องการ dylib ติดตามจากโพสต์นี้

  1. เลือก "เพิ่มอื่น ๆ "
  2. เมื่ออยู่ในหน้าต่างการเลือกไฟล์ให้ทำ "CMD" + Shift + G (ไปที่โฟลเดอร์) & พิมพ์ / usr / lib /
  3. จาก / user / lib คุณสามารถค้นหาไฟล์ * .dylib

11
มันเป็นส่วนหนึ่งของแอปเปิ้ล"แผนลับ" ...
l'L'l

การเพิ่ม * .dylib จาก / usr / lib / นี่ใช้ได้สำหรับฉันเท่านั้นเมื่อใช้งานแอพของฉันบนตัวจำลองมันไม่ทำงานกับอุปกรณ์
keshav vishwkarma

คำตอบ:


153

ฉันค้นหา Google แต่สิ่งเดียวที่ฉันสามารถหาได้คือใบเสนอราคาต่อไปนี้จากฟอรัมนักพัฒนาของ Apple :

สำหรับผู้ที่มีความอยากรู้อยากเห็นไฟล์. tbd เป็น "stub libraries แบบข้อความ" ใหม่ที่ให้ไลบรารี stub ที่มีขนาดกะทัดรัดมากขึ้นสำหรับใช้ใน 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/

คุณยังสามารถดูไฟล์. tbd ได้หากคุณไปที่แท็บ General ของโครงการ Xcode ของคุณจากนั้นเพิ่มไลบรารีภายใต้ Linked Frameworks and Libraries ไฟล์. tbd จะถูกคัดลอกไปยังโครงการของคุณ

ดังนั้นจึงปรากฏว่าไฟล์. dylib เป็นไลบรารีจริงของรหัสไบนารีที่โครงการของคุณใช้และตั้งอยู่ในไดเรกทอรี / usr / lib / บนอุปกรณ์ของผู้ใช้ ในทางกลับกันไฟล์. tbd เป็นเพียงไฟล์ข้อความที่รวมอยู่ในโครงการของคุณและทำหน้าที่เป็นลิงก์ไปยังไบนารี. dylib ที่ต้องการ เนื่องจากไฟล์ข้อความนี้มีขนาดเล็กกว่าไลบรารีไบนารีมากจึงทำให้ขนาดการดาวน์โหลดของ SDK มีขนาดเล็กลง

ณ จุดนี้ฉันแค่คาดเดาจากข้อมูลที่ได้รับดังนั้นโปรดแก้ไขให้ฉันถ้าฉันผิด


3
รูปแบบไฟล์ TBD เป็นเพียงไฟล์ YAML เครื่องมือเชื่อมโยงค้นหาแท็กบางอย่าง
C0deH4cker

5
ทำไมขนาดแอปจึงเล็กลง มันไม่ได้เชื่อมโยงกับ dylib จริง ๆ ในเวลาที่รวบรวม / เชื่อมโยงหรือไม่? ไม่พูดว่าคุณผิดลองพยายามเข้าใจ
stonedauwg

3
มันลดขนาดของ SDK ที่คุณดาวน์โหลดด้วย Xcode ไม่ใช่ขนาดของแอพที่คุณกำลังสร้าง
Joky

ขอบคุณ @Joky ฉันแก้ไขข้อผิดพลาดในคำตอบของฉัน คุณรู้หรือไม่ว่าไบนารีนั้นถูกเพิ่มเข้ากับแอพหากพวกเขาไม่ได้อยู่ใน SDK? แล้วพวกเขามาจากไหน พวกเขาจะดาวน์โหลดตามต้องการขึ้นอยู่กับไฟล์. tbd ใดบ้าง
Suragch

5
dylibs ใน SDK มีอยู่บนอุปกรณ์เมื่อติดตั้งระบบปฏิบัติการ ดังนั้นพวกเขาจึงไม่มีประโยชน์ใน SDK แต่เพื่อให้ตัวเชื่อมโยงทำงานได้เมื่อคุณเชื่อมโยงแอป (ไลบรารีแบบไดนามิกจะไม่ถูกคัดลอกลงในแอพและแยกออกจากกัน) ดังนั้นการเปลี่ยนแปลงกับไฟล์ tbd คือการตัดส่วน dylib ที่เก็บเฉพาะข้อมูลขั้นต่ำที่ linker ใช้และอัพเดทตัวเชื่อมโยงเพื่อทำความเข้าใจกับรูปแบบใหม่นี้
Joky

22

.dylib เป็นไบนารีคอมไพล์ที่มีรหัสเครื่อง .tbd เป็นไฟล์ข้อความขนาดเล็กคล้ายกับแผนที่โมดูลข้ามแพลตฟอร์ม


8
คุณเรียนรู้สิ่งนี้จากที่ไหน คุณมีลิงค์ใด ๆ ที่ฉันสามารถค้นคว้าเพิ่มเติมเกี่ยวกับเรื่องนี้ได้หรือไม่?
Suragch

2
เพียงแค่ดูเนื้อหาของ .
td

6
เป็นไฟล์. ts เหมือนกับไฟล์. tbb หรือไม่ ฉันจะหาไฟล์ดังกล่าวเพื่อดูเนื้อหาได้ที่ไหน?
Suragch

7
เป็น TBD ไม่ใช่ TDS หรือ TDB มันย่อมาจากคำนิยาม dylib ข้อความ
craig65535

4

.tbdText 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
มันไม่มีการประกาศวิธีการ เฉพาะชื่อของคลาสและชื่อของฟังก์ชันฟรีที่ส่งออกจากไลบรารี
Anton Kukoba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.