Xcode 7이 * .dylib 대신 * .tbd를 표시하는 이유는 무엇입니까?


138

대상에서 Xcode 7> 빌드 단계> 바이너리와 라이브러리 연결> 탭 + 버튼

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

그 이유는 무엇입니까?

** dylib가 필요한 사람들은이 게시물을 따르십시오.

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

11
그것은 사과 "비밀 계획" 의 모든 부분입니다 ...
l' L' l' l

/ usr / lib /에서 * .dylib 추가하기 이것은 시뮬레이터에서 앱을 실행할 때만 작동하며 장치에서는 작동하지 않습니다.
keshav vishwkarma 7

답변:


153

Google을 sc이 뒤졌지만 지금까지 내가 찾을 수있는 유일한 것은 Apple 개발자 포럼 의 다음 인용문입니다 .

궁금한 분들을 위해 .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

5
앱 크기가 더 작아지는 이유는 무엇입니까? 어쨌든 컴파일 / 링크 시간에 실제 dylib에 연결되지 않습니까? 당신이 틀렸다고 말하지 않고, 단지 이해하려고
노력함

3
빌드하는 앱의 크기가 아니라 Xcode로 다운로드 한 SDK의 크기를 줄입니다.
Joky

감사합니다, @Joky. 내 답변의 오류를 수정했습니다. 바이너리가 SDK에없는 경우 앱에 바이너리가 추가되는 시점을 알고 있습니까? 그리고 그들은 어디에서 왔습니까? 사용되는 .tbd 파일에 따라 필요에 따라 다운로드됩니까?
Suragch

5
SDK의 dylib는 OS가 설치 될 때 장치에 있습니다. 따라서 SDK에서는 쓸모가 없었지만 앱을 연결할 때 링커에서 작업을 수행 할 수 있도록했습니다 (동적 라이브러리는 앱에 복사되지 않고 분리 된 상태로 유지됨). 따라서 tbd 파일의 변경은 dylib를 제거하여 링커에서 사용한 최소량의 정보 만 유지하고이 새로운 형식을 이해하도록 링커를 업데이트하는 것입니다.
Joky

22

.dylib는 머신 코드를 포함하는 컴파일 된 바이너리입니다. .tbd는 크로스 플랫폼 모듈 맵과 유사한 작은 텍스트 파일입니다.


8
이것을 어디서 배웠습니까? 이것에 대해 더 자세히 조사 할 수있는 링크가 있습니까?
Suragch

2
.tds의 내용을 보시면됩니다
Peter Lapisu

6
.tds 파일이 .tdb 파일과 동일합니까? 내용을보기 위해 이러한 파일을 어디에서 찾을 수 있습니까?
Suragch

7
TDS 또는 TDB가 아닌 TBD입니다. 텍스트 기반 dylib 정의를 나타냅니다.
craig65535

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
메소드 선언은 포함되어 있지 않습니다. 클래스의 이름과 라이브러리에서 내 보낸 무료 함수의 이름 만
Anton Kukoba
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.