programing

Xcode 7이 *.dylib이 아닌 *.tbd로 표시되는 이유는 무엇입니까?

telecom 2023. 5. 15. 21:15
반응형

Xcode 7이 *.dylib이 아닌 *.tbd로 표시되는 이유는 무엇입니까?

Xcode 7 In Target > 빌드 단계 > 바이너리를 라이브러리와 연결 > 탭 + 버튼

추가할 프레임워크를 선택할 때 *.dylib을 찾을 수 없으며 대신 *.tbd가 표시됩니다.

그 이유는 무엇입니까?

**dylib가 필요한 사람들을 위해, 이 게시물에서 팔로우하세요.

  1. "기타 추가"를 선택합니다.
  2. 파일 선택 창에서 "CMD"+Shift+G(폴더로 이동)를 수행하고 /usr/lib/를 입력합니다.
  3. /user/lib에서 *.dylib 파일을 찾을 수 있습니다.

구글을 검색해봤지만 지금까지 찾을 수 있는 것은 애플 개발자 포럼의 다음 인용문뿐입니다.

궁금해하는 사람들에게 .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의 다운로드 크기가 작아집니다.

현 시점에서 저는 단지 주어진 정보로 추측하고 있을 뿐이니, 제가 틀렸다면 수정 부탁드립니다.

.dylib은 시스템 코드를 포함하는 컴파일된 이진 파일입니다. .tbd는 크로스 플랫폼 모듈 맵과 유사한 더 작은 텍스트 파일입니다.

텍스트 기반 dylib 스텁(.tbd)

이것은 일종의 최적화로, 당신이 복사할 필요가 없다는 것을 의미합니다..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위치
  • 기호(클래스의 속성, 메서드)
  • 건축학
  • 연단

기호는 몸, 이름으로 만들어집니다.기능의 본문을 제거하면 공간이 절약됩니다.

운영 체제에는 이미 자체 Apple 라이브러리를 위한 컴파일된 라이브러리가 있으므로 컴파일 중에 본문을 포함할 필요가 없습니다.설치 시 OS(시뮬레이터 또는 실제 장치)가 실제 dylib에 잘 연결됩니다.

심볼릭 링크/바로 가기와 비슷하지만, 라이브러리와 비슷합니다.

동적 라이브러리가 있습니다. 실행 파일이 사용할 코드와 데이터 조각을 노출하는 Mach-O 파일입니다.

시스템의 일부로 배포됩니다.그것이 우리의 틀입니다.그리고 여러분들 중 많은 사람들이 자신만의 틀을 사용합니다.

또한 TBD 파일 또는 텍스트 기반 dylib 스텁도 있습니다.그게 뭐죠?우리가 iOS와 macOS용 SDK를 만들 때, 우리는 MapKit와 WebKit와 같은 훌륭한 기능을 가진 모든 dylib를 가지고 있었습니다. 여러분이 사용하기를 원할지도 모릅니다.하지만 SDK는 크기 때문에 SDK와 함께 전체 복사본을 발송하고 싶지 않습니다. 컴파일러와 링커는 필요하지 않습니다. 프로그램만 실행하면 됩니다. 그래서 대신에 우리는 모든 기호의 본문을 삭제하고 이름만 가지고 있는 stubdylib라고 불리는 것을 만듭니다.

그리고 나서, 우리는 그것들을 우리가 사용하기 더 쉬운 텍스트로 표현했습니다.현재는 크기를 줄이기 위해 SDK 배포에만 사용됩니다.

그래서 여러분은 프로젝트에서 그들을 볼 수 있지만, 여러분은 그들에 대해 걱정할 필요가 없습니다.그리고 그들은 오직 상징만을 포함합니다.

Xcode 빌드 프로세스의 배후에서 - 48:38

언급URL : https://stackoverflow.com/questions/31450690/why-xcode-7-shows-tbd-instead-of-dylib

반응형