Contents

electricbolt/bindkit

A simple to use two-way UIKit data binding framework for iOS. **Only one API to learn**.

Adding BindKit to your app

Manual integration

  • Link BindKit.xcframework into your app.
  • Add the build settings -ObjC and -all_load to Other Linker Flags.

Swift Package Manager

  • Add a Swift Package Manager dependency with the URL https://github.com/electricbolt/bindkit.
  • Add the build settings -ObjC and -all_load to Other Linker Flags.

PrivacyInfo.xcprivacy

The iOS BindKit.xcframework includes an embedded PrivacyInfo.xcprivacy file. The file is effectively empty as BindKit does not have any Tracking component or use any APIs as per the Apple privacy manifest files documentation.

Current PrivacyInfo.xcprivacy file contents


<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSPrivacyTracking</key>
    <false/>
    <key>NSPrivacyTrackingDomains</key>
    <array/>
    <key>NSPrivacyCollectedDataTypes</key>
    <array/>
    <key>NSPrivacyAccessedAPITypes</key>
    <array/>
</dict>
</plist>

Building

Whilst the static XCFramework is prebuilt and included in the repository, if you need to rebuild then follow these steps:

  • Edit the buildframework.sh file. Comment out the codesign line.
  • Execute the command ./buildframework.sh.

The rebuilt static XCFramework will be placed into the root of the project.

The build script currently assumes iOS SDK 17.5. If you are using a different Xcode build chain, tweak the IOSSDK_VER variable in the build script as appropriate.

Under the hood

Model

Model properties that participate in binding are monitored for changes using Key-Value-Observing (KVO). For this reason model objects must inherit from NSObject, and if using Swift, properties must be marked with @objc dynamic.

View

Views that participate in binding are dynamically subclassed at runtime. There is one dynamic subclass implemented for each supported view. Depending on the view, different methods for monitoring changes are required: target-action, delegation or notifications.

View not supported? Submit a pull request with your changes to add the property or class, or use the Vendor API to add custom functionality in your own app.

Package Metadata

Repository: electricbolt/bindkit

Default branch: master

README: README.md