Releases: inoahdev/tbd
tbd v2.2
tbd v2.1
tbd v2.1 is the first release in nearly a year. Overall a lot has changed.
The major feature for this release is support for tbdv4
, the latest version for the tbd format, and one which is radically different from previous tbd-versions.
A major change in tbdv4
is the switch from architectures to targets. A target is a pair of both an arch and platform (ex. armv7-ios
, arm64-macos
). To handle targets, a new option --replace-targets
has also been added.
Note: --replace-archs
is still supported ontbdv4
, only the archs, and not the platforms, are replaced
A major change in this release is the removal of global options. Because of how different the versions now are, handling the conflict between global and local options are impossible to do right
Several bugs were squashed for dyld_shared_cache
parsing.
The codebase is now much cleaner, thanks to options and flags masks having been moved into more type-safe structs
(with some in unions
) with bool
bitfields.
In addition, the codebase is now more centralized, with the tbd
module handling both symbol-parsing and adding, and resolving conflicts between tbd-versions. In the future, this change may make the codebase easier to extend.
tbd v2.0
After a long hiatus, tbd v2.0 has finally been released.
The project has been rewritten in C
Performance has been significantly improved, with about a 2.5X speedup for most operations.
Support for dyld_shared_cache files have now been added
Some options have been renamed for a more cohesive naming style.
New options are now available (Ex: --list-dsc-images
to list images inside a dyld_shared_cache)
tbd v2.0.0-alpha3
tbd v2.0.0-alpha3
addresses a bug introduced in tbd v2.0.0-alpha2
that would lead to an overall accumulation of symbols in all tbds generated when recursing a directory
tbd v2.0.0-alpha2
tbd v2.0.0-alpha2
addresses bugs in alpha1 found when trying to build a valid sdk
for theos
Changes:
- Validate tbd-file information before writing out to output
- Print the paths of the mach-o and output-file when recursing, not their provided directory-paths
Bug Fixes
- Bug where
tbd
would not write out the symbol it had stored if architectures were being replaced - Bug where
tbd
would write out lines of symbols much shorter than it was supposed to
tbd v2.0.0-alpha1
tbd has been rewritten to be more configurable, expandable, and overall, just easier to maintain
The code for this rewrite exists on the 'rewrite' branch, which will eventually be merged into master and released as tbd v2.0. But for right now, it is in alpha.
This branch is now a couple months old, and approaching to be 100 commits ahead of master! So some basic level of functionality should be expected
A lot has changed, many options added, few removed, some renamed. To see a full list, Please look at the README
or run tbd -h
and compare the differences
It's possible that many of these options have bugs, do not work as intended, or are simply unrecognized by tbd
This is not intentional, but likely a forgotten step in the long process of rewriting tbd.
If you do see any bugs, report them in the issues tab here on GitHub.
Be sure to provide any contextual information that may be necessary to fix the bug (e.g. a link to a file that tbd was not parsing correctly)
tbd v1.2
tbd v1.2 has now been released.
New Features:
- Option
--list-architectures
can now be provided any valid mach-o file and list its architectures stdin
(standard input) can now be provided as a path (Ex:tbd -p stdin
)- Add option
--replace-path-extension
to replace path-extension of mach-o file with .tbd (Ex:foo.dylib -> foo.tbd
instead offoo.dylib -> foo.dylib.tbd
) - Add option
--only-dynamic-libraries
to option--list-macho-libraries
to print only dynamic libraries - Add new field
parent-umbrella:
- Add new field
sub-clients:
(allowed-clients:
in tbd v1) - Re-add field
objc-constraint:
with full support - tbd now only indicates success in recursion when it has outputted at least one tbd file
- Allow overriding some tbd fields, as well as removing them with the following options:
--flags
, Specify flags to add onto ones found in provided mach-o file(s)--ignore-missing-exports
, Ignore if no symbols or reexpors to output are found in provided mach-o file(s)--ignore-missing-uuids
, Ignore if uuids are not found in provided mach-o file(s)--ignore-non-unique-uuids
, Ignore if uuids found in provided mach-o file(s) not unique--objc-constraint
, Specify objc-constraint to use instead of one(s) found in provided mach-o file(s)--remove-current-version
, Remove current-version field from outputted tbds--remove-compatibility-version
, Remove compatibility-version field from outputted tbds--remove-exports
, Remove exports field from outputted tbds--remove-flags
, Remove flags field from outputted tbds--remove-objc-constraint
, Remove objc-constraint field from outputted tbds--remove-parent-umbrella
, Remove parent-umbrella field from outputted tbds--remove-swift-version
, Remove swift-version field from outputted tbds--remove-uuids
, Remove uuids field from outputted tbds
- Add
--list-objc-constraints
to list all valid objc-constraints for the tbd-field option--objc-constraint
- Add
--list-tbd-flags
to list all valid tbd-flags for the tbd-field option--flags
Bug Fixes:
- Fix handling of mach-o file when it had no load-commands
- Fix bug where tbd files were created for a mach-o file with an empty installation name (of 0 length or containing only spaces)
- Fix bug where tbd would not find objc (and swift) information if contained inside the
__OBJC
segment - Fix bug where unused created directories would not be removed
- Fix multiple bugs inside tbd's segment-handling code
Miscellaneous Changes:
- tbd now prints errors at the end of string outside parenthesis
- tbd now "cleans" paths, removing multiple slashes, changing backward slashes to forward, and removing
.
path-components
tbd v1.1
tbd v1.1 has now been released.
New Features:
- tbd can now auto-detect platform in a mach-o file.
Overriding platform in place of one in a mach-o file can be done with the--platform
option - tbd can now auto-detect swift-version in a mach-o file
- tbd can now add internal symbols (see Usage menu)
- tbd can now have custom architectures on tbd-version v2. (uuids for the mach-o file's are not outputted if custom architectures are provided)
- tbd can now output for provided architectures. This option overrides
-a
of the architecture-overrides option of previous versions - tbd now deletes created files and folders when tbd has nothing to output.
- tbd now allows you to stop printing of warnings with the option
--dont-print-warnings
Bug Fixes:
- Bug where symbols of different types would be placed in sections of other types
- Bug where tbd-version v2 would not be set (by default)
- Bug where tbd would fail to recognize mach-o files of architecture
subtype::big
- Bug where tbd would fail to recognize mach-o files of architecture
cputype::m88000
- Bug where tbd would interpret architectures of mach-o files inaccurately
- Bug where tbd would not properly assign symbols to groups of architectures
- Memory leak when checking if a file is a valid mach-o
- Numerous bugs where global options would not be used when local wasn't provided
- Bug where tbd would not close an opened file if validation happened
- Bug where tbd would not exit when failing to open the current-directory in
--list-macho-libraries
- Bug where tbd would not swap integers from a big-endian mach-o file
- Bug where the option
-p
(or--path
) would fail - Bug where tbd would not exit on failure when removing a directory
Miscellaneous Changes:
- tbd no longer adds a
objc-constraint:
field - tbd now allows you to enter
--list-platform
when prompted for a platform (in the rare case where one isn't found in the mach-o file) - tbd options (
--list-architectures
and--list-platform
) now output horizontally as opposed to vertically (on individual lines) - tbd no longer fails if a mach-o file has an empty symbol-table
- tbd no longer prints paths when only a single file was provided (An exception is made when parsing and validating options as tbd can't tell how many paths were provided until after parsing)
- tbd no longer fails if a mach-o file has no symbol-table
v1.0 is here 🎉
tbd v1.0 is now released 🎉, thanks to all who went through the beta releases 🙂
Major Changes:
- Revamped Usage menu: Re-organized to properly convey the features added to tbd in past releases
- Huge rewrite; tbd has been rewritten in many ways, and is now 10x faster in parsing mach-o libraries and outputting tbd-files than the previous release
Parsing UIKit: (from iPhoneSimulator SDK)
v0.9
:1.15 seconds
(user)v1.0
:0.12 seconds
(user)
Parsing AppKit: (from macOS SDK)
v0.9
:3.17 seconds
(user)v1.0
:0.31 seconds
(user)
Minor changes:
- tbd now only outputs a notice when failing to open a sub-directory while recursing, instead of throwing an error
- tbd now recognizes symbols with a prefix of
.objc_class_name
as obj-c class symbols
Bug Fixes:
- Fixed bug where tbd would fail to properly parse a mach-o file (to check if it its a library)
- Fixed bug where tbd would output unsorted symbols
- Fixed bug where tbd would fail to recognize a fat mach-o container (rare, in case one is ever given as input)
- Fixed bug where tbd would fail to realize that an output path was not provided
- Fixed bug where tbd would stop parsing arguments after providing the output option
Performance Improvements, New Features
New Features:
--maintain-directories
a new outputting option, will recreate directories mach-o libraries were found in (subtracting the directories in the provided path) in the output folder
Example: The output location for a library found at /usr/bin/libobjc.dylib
with the original path provided to recurse through being /usr/
, and provided output directory being /Documents/output/
would be /Documents/output/bin/libobjc.dylib