objectbox-swift icon indicating copy to clipboard operation
objectbox-swift copied to clipboard

Support for Swift Package Manager

Open andreasley opened this issue 6 years ago • 32 comments

It would be great if the repository contained a Package.swift manifest to allow using objectbox-swift as a dependency with Swift Package Manager.

With Xcode 11, Swift Packages can be added and managed very easily directly in the GUI and without any external requirements (e.g. CocoaPods).

andreasley avatar Sep 25 '19 23:09 andreasley

We're keeping an eye on SPM, but there are a few features missing in it currently to work for ObjectBox.

uli-objectbox avatar Sep 26 '19 08:09 uli-objectbox

To be clearer: SwiftPM currently does not support including an already-built library, nor a helper executable like our code generator.

uli-objectbox avatar Sep 26 '19 08:09 uli-objectbox

There is a proposal here: https://forums.swift.org/t/pitch-support-for-binary-dependencies/27620/90

If you find a better way of "tracking" Apple's progress for this, please post here.

Can we work around those limitations some how? E.g. have the Swift code packaged with SPM, and have a hook somewhere to provide the non-Swift parts?

greenrobot avatar Sep 26 '19 17:09 greenrobot

There is now an official proposal for binary dependencies: https://github.com/apple/swift-evolution/blob/master/proposals/0272-swiftpm-binary-dependencies.md

Review (currently running): https://forums.swift.org/t/se-0272-package-manager-binary-dependencies/30753

andreasley avatar Nov 15 '19 13:11 andreasley

This will be implemented into Swift 5.3. Hopefully objectbox will be able to implement it shortly after.

PS @greenrobot Check out https://apps.apple.com/us/app/evolution-app/id1210898168.

fishcharlie avatar Apr 16 '20 05:04 fishcharlie

This small WWDC 2020 video "Distribute binary frameworks as Swift packages" might be helpful: https://developer.apple.com/videos/play/wwdc2020/10147

greenrobot avatar Jun 30 '20 09:06 greenrobot

I guess setting up an XCFramework and enabling .swiftinterface would be a prerequisite. Would be also useful to Carthage; see https://github.com/Carthage/Carthage/issues/2887#issuecomment-651664143.

greenrobot avatar Jun 30 '20 09:06 greenrobot

Hi all,

@paulofaria and I have been looking at this, and we are able to build and use the ObjectBox framework using spm on MacOS Catalina using the 5.2 toolchain. To do so, we've reorganised the repo to better match the standard spm project structure, and would like to discuss how we can merge the main repo and our fork going forward. Below, you can find the result of our work: https://github.com/katalysis-io/objectbox-swift (spm version ported to 1.3.1) https://github.com/katalysis-io/objectbox-spm-test (simple cli binary linking to objectbox using spm to manage dependencies)

We still have issues compiling on Linux due to the presence of Foundation in the ObjectiveC/C++ wrappers around the ObjectBox C lib to catch exceptions.

ratranqu avatar Jul 01 '20 13:07 ratranqu

@ratranqu Cool. Thanks for pushing this!

Seems like we have 3 topics here:

  1. Reorganizing the repo is not trivial for us, as there are some interdependent things at our end internally. But let's see what we can do over time...

  2. I'd like to understand better the swift build approach vs. XCFrameworks. Iirc, XCFrameworks only works on Apple platforms, but not on Linux? XCFrameworks still seems to be the way to go for Apple ecosystem.

  3. Not sure if those ObjectiveC/C++ wrappers are still required... Could you open a new issue with some details?

greenrobot avatar Jul 01 '20 14:07 greenrobot

We've been experimenting with XCFramework a little bit.

You can download it here if you want to play around with it: https://github.com/objectbox/objectbox-swift/releases/download/v1.3.1/ObjectBox.xcframework.zip

Related commit with the script building the xcframework: 25222a560a34c557851846bee9f908f02f485b92

While the framework is one of the pieces, we also have to get the ObjectBox Swift code generator working. Not sure if Swift Package Manager can help with that...

greenrobot avatar Jul 01 '20 16:07 greenrobot

@ratranqu (off-topic) old error handling code was removed in ced59de0065ec5a27887b1e1aae8944fd2544941 - for any ObjC/NS leftovers, please raise an issues.

greenrobot avatar Jul 10 '20 13:07 greenrobot

Any updates regarding adding support to SPM? As of Swift 5.3, SPM supports embeded binaries if needed 🙏

rogerluan avatar Nov 15 '20 20:11 rogerluan

Waiting For SPM ~

caoyanglee avatar Dec 08 '20 03:12 caoyanglee

Some updates: our latest version 1.5 now uses XCFramework; this allows us to bundle the runtime library using SPM. Expect some updates on that very soon. This will still require some manual setup for the code generator, that needs to be integrated into the build.

Next, we are looking forward to the availability of Package Manager Extensible Build Tools. If things work out, this SwiftPM plugin mechanism will eliminate the manual setup.

greenrobot avatar May 06 '21 08:05 greenrobot

OK, we have a preliminary SPM installation in place. Check the SPM tab in our Swift docs. Not sure if setting up the generator works for everyone yet, please let us know. If it doesn't, check the manual setup for the generator.

greenrobot avatar Jun 04 '21 09:06 greenrobot

Howdy. I added ObjectBox to a tiny app project.

In Xcode, I went to File > Add Packages..., pasted the ObjectBox GitHub URL into the search field, saw objectbox-swift and objectbox-swift-generator, chose objectbox-swift and pressed Add Package.

After I ran:

~/Library/Developer/Xcode/DerivedData/ndgrf2-cqpqfeggakslaudpbqkvztxcabps/SourcePackages/checkouts/objectbox-swift/Source/ios-framework/cocoapod/setup.rb ~/Code/ndgrf2/ndgrf2.xcodeproj/

And output looked good: a few blue diamonds and a couple green checkmarks.

I added the 12 lines of sample code from here under "Initializing a Store". The Xcode live issues feature had no problem with the code.

I pressed command+B for Simulator and got this build error:

Script: /Users/jeff/Code/ndgrf2/../../Library/Developer/Xcode/DerivedData/ndgrf2-cqpqfeggakslaudpbqkvztxcabps/SourcePackages/checkouts/objectbox-swift/Source/ios-framework/cocoapod/generate_sources.sh
Script realpath: /Users/jeff/Library/Developer/Xcode/DerivedData/ndgrf2-cqpqfeggakslaudpbqkvztxcabps/SourcePackages/checkouts/objectbox-swift/Source/ios-framework/cocoapod/generate_sources.sh
error: Cannot find Sourcery in the expected location at '/Users/jeff/Library/Developer/Xcode/DerivedData/ndgrf2-cqpqfeggakslaudpbqkvztxcabps/SourcePackages/checkouts/objectbox-swift/Source/ios-framework/cocoapod/Sourcery.app/Contents/MacOS/Sourcery'

So I guess I need to add that objectbox-swift-generator package also?

funcJeff avatar Apr 06 '22 01:04 funcJeff

@coderliu007 Is this related to #82? This does not seem to be related to this issue.

Edit: note that ObjectBox for Swift does not support Swift Package Manager, yet. We only did an experimental release a while back.

greenrobot-team avatar Oct 09 '23 11:10 greenrobot-team