Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jspahrsummers/libextobjc
A Cocoa library to extend the Objective-C programming language.
https://github.com/jspahrsummers/libextobjc
Last synced: 4 months ago
JSON representation
A Cocoa library to extend the Objective-C programming language.
- Host: GitHub
- URL: https://github.com/jspahrsummers/libextobjc
- Owner: jspahrsummers
- License: mit
- Archived: true
- Created: 2011-03-06T08:47:33.000Z (almost 14 years ago)
- Default Branch: master
- Last Pushed: 2019-04-23T07:16:41.000Z (over 5 years ago)
- Last Synced: 2024-05-18T06:41:12.272Z (8 months ago)
- Language: Objective-C
- Homepage:
- Size: 1.53 MB
- Stars: 4,529
- Watchers: 159
- Forks: 461
- Open Issues: 30
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome-ios - libextobjc - A Cocoa library to extend the Objective-C programming language. (Utility / Web View)
- awesome-iOS-Library-Curator - LibExtobj
- awesome-ios-star - libextobjc - A Cocoa library to extend the Objective-C programming language. (Utility / Web View)
- Awesome-iOS - libextobjc - A Cocoa library to extend the Objective-C programming language. (Foundation)
README
The Extended Objective-C library extends the dynamism of the Objective-C programming language to support additional patterns present in other programming languages (including those that are not necessarily object-oriented).
libextobjc is meant to be very modular – most of its classes and modules can be used with no more than one or two dependencies.
# Features
libextobjc currently includes the following features:
* **Safe categories**, using EXTSafeCategory, for adding methods to a class without overwriting anything already there (identifying conflicts for you).
* **Concrete protocols**, using EXTConcreteProtocol, for providing default implementations of the methods in a protocol.
* **Simpler and safer key paths**, using EXTKeyPathCoding, which automatically checks key paths at compile-time.
* **Compile-time checking of selectors** to ensure that an object declares a given selector, using EXTSelectorChecking.
* **Easier use of weak variables in blocks**, using `@weakify`, `@unsafeify`, and `@strongify` from the EXTScope module.
* **Scope-based resource cleanup**, using `@onExit` in the EXTScope module, for automatically cleaning up manually-allocated memory, file handles, locks, etc., at the end of a scope.
* **Algebraic data types** generated completely at compile-time, defined using EXTADT.
* **Synthesized properties for categories**, using EXTSynthesize.
* **Block-based coroutines**, using EXTCoroutine.
* **EXTNil, which is like `NSNull`, but behaves much more closely to actual `nil`** (i.e., doesn't crash when sent unrecognized messages).
* **Lots of extensions** and additional functionality built on top of ``, including extremely customizable method injection, reflection upon object properties, and various functions to extend class hierarchy checks and method lookups.The [experimental](https://github.com/jspahrsummers/libextobjc/tree/experimental)
branch contains additional features that may be interesting, but are not
considered stable or safe for production use. Check out the headers for more
information.# Running tests
To execute libextobjc's tests, first run `git submodule update --init --recursive`
to bring in the [xcconfigs](https://github.com/jspahrsummers/xcconfigs) submodule,
then open the project file and choose the desired test target.# Adding to your project
If you want to add libextobjc as a dependency to an **application**, add the
repository as a [submodule](http://git-scm.com/book/en/Git-Tools-Submodules),
then include the source files you care about in your Xcode project.If you want to add libextobjc as a dependency to a **framework or library**,
prefer [subtree merging](http://git-scm.com/book/en/Git-Tools-Subtree-Merging),
which will allow you to rename symbols to avoid conflicts, and make any tweaks
you need to for your library.To create a libextobjc subtree:
```
$ git remote add libextobjc https://github.com/jspahrsummers/libextobjc.git
$ git fetch libextobjc
$ git read-tree --prefix=External/ -u libextobjc/master
$ git reset
```Rename any symbols or change whatever you want, `git add` the specific files
that you want in your library, and then add them to your Xcode project.To bring in upstream changes later:
```
$ git fetch -p libextobjc
$ git merge -Xsubtree=External/ libextobjc/master
$ git reset
```Then, again, just add the changes you want.
# License
Released under the MIT License. See the
[LICENSE](https://github.com/jspahrsummers/libextobjc/blob/master/LICENSE.md)
file for more information.# Requirements
libextobjc must be built with ARC enabled, and many of its macros require ARC in the calling files as well. MRR usage is not supported.