Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integrate uniffi-swift-helper #451

Draft
wants to merge 3 commits into
base: trunk
Choose a base branch
from
Draft
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Integrate uniffi-swift-helper
crazytonyli committed Dec 17, 2024
commit c61efa37e5800c87a54d634ef439d8f230584af9
2 changes: 1 addition & 1 deletion .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
@@ -66,7 +66,7 @@ steps:

echo "--- :swift: Building xcframework"
make xcframework
zip -r target/libwordpressFFI.xcframework.zip target/libwordpressFFI.xcframework
zip -r target/libwordpressFFI.xcframework.zip target/libwordpressFFI/libwordpressFFI.xcframework
artifact_paths:
- target/libwordpressFFI.xcframework.zip
- native/swift/Sources/wordpress-api-wrapper/wp_api.swift
3 changes: 3 additions & 0 deletions .buildkite/swift-test.sh
Original file line number Diff line number Diff line change
@@ -6,6 +6,9 @@ set -euo pipefail

export SKIP_PACKAGE_WP_API=true

echo "--- :swift: Generating Package.swift"
make generate-swift-package-manifest

function run_tests() {
local platform; platform=$1
echo "--- :swift: Testing on $platform simulator"
4 changes: 2 additions & 2 deletions .buildkite/validate-cocoapods.sh
Original file line number Diff line number Diff line change
@@ -24,12 +24,12 @@ Pod::Spec.new do |spec|
spec.ios.deployment_target = '13.0'
spec.osx.deployment_target = '11.0'

# zip -r swift-source-archive.zip native/swift target/libwordpressFFI.xcframework
# zip -r swift-source-archive.zip native/swift target/libwordpressFFI/libwordpressFFI.xcframework
spec.source = { :http => "http://s3.com/WordPressAPI.zip" }

spec.swift_version = '5.10'
spec.source_files = 'native/swift/Sources/**/*.{swift}'
spec.vendored_frameworks = 'target/libwordpressFFI.xcframework'
spec.vendored_frameworks = 'target/libwordpressFFI/libwordpressFFI.xcframework'

spec.pod_target_xcconfig = {
'SWIFT_PACKAGE_NAME' => 'WordPressAPI'
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -31,6 +31,7 @@ xcuserdata
DerivedData
fastlane/report.xml
libwordPressFFI.xcframework*
/Package.swift

# Auto-generated Swift Files
native/swift/Sources/wordpress-api-wrapper/*.swift
172 changes: 145 additions & 27 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@ members = [
"wp_derive_request_builder",
"wp_serde_helper",
"wp_uniffi_bindgen",
"xcframework",
"swift_helper_cli",
]
resolver = "2"

@@ -43,5 +43,9 @@ tokio = "1.42"
toml = "0.8"
trybuild = "1.0"
uniffi = "0.28"
uniffi-swift-helper = "0.1.0"
url = "2.5"
uuid = "1.11"

[patch.crates-io]
uniffi-swift-helper = { git = "https://github.com/automattic/uniffi-swift-helper.git", branch = "real-stuff" }
54 changes: 10 additions & 44 deletions Makefile
Original file line number Diff line number Diff line change
@@ -61,58 +61,22 @@ release-on-ci:
@echo "Swift package will be released by https://buildkite.com/automattic/wordpress-rs/builds/$$(jq -r '.number' .build/buildkite_release_job_response.json)"
@echo "Once that job finishes, Android libraries will be release by https://buildkite.com/automattic/wordpress-rs/builds?branch=$(WORDPRESS_RS_NEW_VERSION)"

apple-platform-targets-macos := x86_64-apple-darwin aarch64-apple-darwin
apple-platform-targets-ios := aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim
apple-platform-targets-tvos := aarch64-apple-tvos aarch64-apple-tvos-sim
apple-platform-targets-watchos := arm64_32-apple-watchos x86_64-apple-watchos-sim aarch64-apple-watchos-sim
apple-platform-targets := \
$(apple-platform-targets-macos) \
$(apple-platform-targets-ios) \
$(apple-platform-targets-tvos) \
$(apple-platform-targets-watchos)

ifeq ($(BUILDKITE), true)
CARGO_PROFILE ?= release
CARGO_PROFILE_DIRNAME := release
else
CARGO_PROFILE ?= dev
CARGO_PROFILE_DIRNAME := debug
endif

cargo_config_library = --config profile.$(CARGO_PROFILE).debug=true --config 'profile.$(CARGO_PROFILE).panic="abort"'

# Set deployment targets for each platform
_build-apple-%-darwin: export MACOSX_DEPLOYMENT_TARGET=$(swift_package_platform_macos)
_build-apple-%-ios _build-apple-%-ios-sim: export IPHONEOS_DEPLOYMENT_TARGET=$(swift_package_platform_ios)
_build-apple-%-tvos _build-apple-%-tvos-sim: export TVOS_DEPLOYMENT_TARGET=$(swift_package_platform_tvos)
_build-apple-%-watchos _build-apple-%-watchos-sim: export WATCHOS_DEPLOYMENT_TARGET=$(swift_package_platform_watchos)

# Use nightly toolchain for tvOS and watchOS
_build-apple-%-tvos _build-apple-%-tvos-sim _build-apple-%-watchos _build-apple-%-watchos-sim: \
CARGO_OPTS = +$(rust_nightly_toolchain) -Z build-std=panic_abort,std

# Build the library for a specific target
_build-apple-%:
cargo $(CARGO_OPTS) $(cargo_config_library) build --target $* --package wp_api --profile $(CARGO_PROFILE)
./scripts/swift-bindings.sh target/$*/$(CARGO_PROFILE_DIRNAME)/libwp_api.a

# Build the library for one single platform, including real device and simulator.
build-apple-platform-macos := $(addprefix _build-apple-,$(apple-platform-targets-macos))
build-apple-platform-ios := $(addprefix _build-apple-,$(apple-platform-targets-ios))
build-apple-platform-tvos := $(addprefix _build-apple-,$(apple-platform-targets-tvos))
build-apple-platform-watchos := $(addprefix _build-apple-,$(apple-platform-targets-watchos))

# Creating xcframework for one single platform, including real device and simulator.
xcframework-only-macos: $(build-apple-platform-macos)
xcframework-only-ios: $(build-apple-platform-ios)
xcframework-only-tvos: $(build-apple-platform-tvos)
xcframework-only-watchos: $(build-apple-platform-watchos)
xcframework-only-%:
cargo run --quiet --bin xcframework -- --profile $(CARGO_PROFILE) --targets $(apple-platform-targets-$*)
xcframework-only-macos:
cargo run -q --bin swift_helper_cli build --package wp_api --profile $(CARGO_PROFILE) --ffi-module-name libwordpressFFI --only-macos

xcframework-only-ios:
cargo run -q --bin swift_helper_cli build --package wp_api --profile $(CARGO_PROFILE) --ffi-module-name libwordpressFFI --only-ios

# Creating xcframework for all platforms.
xcframework-all: $(build-apple-platform-macos) $(build-apple-platform-ios) $(build-apple-platform-tvos) $(build-apple-platform-watchos)
cargo run --quiet --bin xcframework -- --profile $(CARGO_PROFILE) --targets $(apple-platform-targets)
xcframework-all:
cargo run -q --bin swift_helper_cli build --package wp_api --profile $(CARGO_PROFILE) --ffi-module-name libwordpressFFI

ifeq ($(SKIP_PACKAGE_WP_API),true)
xcframework:
@@ -123,11 +87,13 @@ endif

xcframework-package: xcframework-all
rm -rf libwordpressFFI.xcframework.zip
ditto -c -k --sequesterRsrc --keepParent target/libwordpressFFI.xcframework/ libwordpressFFI.xcframework.zip
ditto -c -k --sequesterRsrc --keepParent target/libwordpressFFI/libwordpressFFI.xcframework/ libwordpressFFI.xcframework.zip

xcframework-package-checksum:
swift package compute-checksum libwordpressFFI.xcframework.zip | tee libwordpressFFI.xcframework.zip.checksum.txt

generate-swift-package-manifest:
cargo run -q --bin swift_helper_cli generate-package --package wp_api --ffi-module-name libwordpressFFI --project-name wordpress-rs --package-name-map wp_api:WordpressAPI

docker-image-swift:
docker build -t wordpress-rs-swift -f Dockerfile.swift .
132 changes: 0 additions & 132 deletions Package.swift

This file was deleted.

3 changes: 0 additions & 3 deletions native/swift/Sources/wordpress-api-wrapper/README.md

This file was deleted.

47 changes: 0 additions & 47 deletions scripts/swift-bindings.sh

This file was deleted.

8 changes: 8 additions & 0 deletions swift_helper_cli/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[package]
name = "swift_helper_cli"
version = "0.1.0"
edition = "2021"

[dependencies]
uniffi-swift-helper = { workspace = true }
anyhow = { version = "1.0" }
3 changes: 3 additions & 0 deletions swift_helper_cli/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
fn main() -> anyhow::Result<()> {
uniffi_swift_helper::cli_main()
}
9 changes: 0 additions & 9 deletions xcframework/Cargo.toml

This file was deleted.

379 changes: 0 additions & 379 deletions xcframework/src/main.rs

This file was deleted.