Skip to content

Releases: inoahdev/tbd

tbd v2.2

12 Oct 04:43
Compare
Choose a tag to compare

Fix several bugs from the previous release

tbd v2.1

16 Jan 18:02
Compare
Choose a tag to compare

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

14 Feb 01:22
Compare
Choose a tag to compare

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

16 Mar 03:01
Compare
Choose a tag to compare
tbd v2.0.0-alpha3 Pre-release
Pre-release

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

15 Mar 03:13
Compare
Choose a tag to compare
tbd v2.0.0-alpha2 Pre-release
Pre-release

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

13 Mar 07:22
Compare
Choose a tag to compare
tbd v2.0.0-alpha1 Pre-release
Pre-release

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

12 Nov 00:30
Compare
Choose a tag to compare

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 of foo.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

23 Sep 00:05
Compare
Choose a tag to compare

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 🎉

22 Jul 20:46
Compare
Choose a tag to compare

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

28 Jun 17:22
Compare
Choose a tag to compare
Pre-release

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