iOS: replace cargo-lipo, and update for new macOS (#3109)
# Objective - Remove `cargo-lipo` as [it's deprecated](https://github.com/TimNN/cargo-lipo#maintenance-status) and doesn't work on new Apple processors - Fix CI that will fail as soon as GitHub update the worker used by Bevy to macOS 11 ## Solution - Replace `cargo-lipo` with building with the correct target - Setup the correct path to libraries by using `xcrun --show-sdk-path` - Also try and fix path to cmake in case it's not found but available through homebrew
This commit is contained in:
parent
1b8453d9a0
commit
d59a3ddd61
@ -322,9 +322,14 @@ Example | File | Description
|
|||||||
|
|
||||||
### Setup
|
### Setup
|
||||||
|
|
||||||
|
You need to install the correct rust targets:
|
||||||
|
|
||||||
|
- `aarch64-apple-ios`: iOS devices
|
||||||
|
- `x86_64-apple-ios`: iOS simulator on x86 processors
|
||||||
|
- `aarch64-apple-ios-sim`: iOS simulator on Apple processors
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
rustup target add aarch64-apple-ios x86_64-apple-ios
|
rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim
|
||||||
cargo install cargo-lipo
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Build & Run
|
### Build & Run
|
||||||
@ -353,15 +358,6 @@ open bevy_ios_example.xcodeproj/
|
|||||||
which will open xcode. You then must push the zoom zoom play button and wait
|
which will open xcode. You then must push the zoom zoom play button and wait
|
||||||
for the magic.
|
for the magic.
|
||||||
|
|
||||||
The Xcode build GUI will by default build the rust library for both
|
|
||||||
`x86_64-apple-ios`, and `aarch64-apple-ios` which may take a while. If you'd
|
|
||||||
like speed this up, you update the `IOS_TARGETS` User-Defined environment
|
|
||||||
variable in the "`cargo_ios` target" to be either `x86_64-apple-ios` or
|
|
||||||
`aarch64-apple-ios` depending on your goal.
|
|
||||||
|
|
||||||
Note: if you update this variable in Xcode, it will also change the default
|
|
||||||
used for the `Makefile`.
|
|
||||||
|
|
||||||
Example | File | Description
|
Example | File | Description
|
||||||
--- | --- | ---
|
--- | --- | ---
|
||||||
`ios` | [`ios/src/lib.rs`](./ios/src/lib.rs) | The `3d/3d_scene.rs` example for iOS
|
`ios` | [`ios/src/lib.rs`](./ios/src/lib.rs) | The `3d/3d_scene.rs` example for iOS
|
||||||
|
@ -11,4 +11,19 @@ name = "bevy_ios_example"
|
|||||||
crate-type = ["staticlib"]
|
crate-type = ["staticlib"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bevy = { path = "../../", features = [ "bevy_gilrs", "bevy_gltf", "bevy_wgpu", "bevy_winit", "render", "png", "hdr", "bevy_audio", "mp3"], default-features = false}
|
bevy = { path = "../../", features = [
|
||||||
|
"bevy_audio",
|
||||||
|
"bevy_core_pipeline",
|
||||||
|
"bevy_gltf2",
|
||||||
|
"bevy_wgpu",
|
||||||
|
"bevy_sprite2",
|
||||||
|
"bevy_render2",
|
||||||
|
"bevy_pbr2",
|
||||||
|
"bevy_winit",
|
||||||
|
"render",
|
||||||
|
"png",
|
||||||
|
"hdr",
|
||||||
|
"mp3",
|
||||||
|
"x11",
|
||||||
|
"filesystem_watcher"
|
||||||
|
], default-features = false}
|
||||||
|
@ -15,10 +15,10 @@ install: xcodebuild-simulator boot-sim
|
|||||||
xcrun simctl install $(DEVICE) build/Build/Products/Debug-iphonesimulator/bevy_ios_example.app
|
xcrun simctl install $(DEVICE) build/Build/Products/Debug-iphonesimulator/bevy_ios_example.app
|
||||||
|
|
||||||
xcodebuild-simulator:
|
xcodebuild-simulator:
|
||||||
IOS_TARGETS=x86_64-apple-ios xcodebuild -scheme bevy_ios_example -configuration Debug -derivedDataPath build -destination "id=$(DEVICE)"
|
IOS_TARGETS=x86_64-apple-ios xcodebuild -scheme bevy_ios_example -configuration Debug -derivedDataPath build -destination "id=$(DEVICE)"
|
||||||
|
|
||||||
xcodebuild-iphone:
|
xcodebuild-iphone:
|
||||||
IOS_TARGETS=aarch64-apple-ios xcodebuild -scheme bevy_ios_example -configuration Debug -derivedDataPath build -arch arm64
|
IOS_TARGETS=aarch64-apple-ios xcodebuild -scheme bevy_ios_example -configuration Debug -derivedDataPath build -arch arm64
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -r build
|
rm -r build
|
||||||
|
@ -276,9 +276,17 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
LIBRARY_SEARCH_PATHS = (
|
"LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=arm64]" = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
../../target/universal/release,
|
"../../target/aarch64-apple-ios/release",
|
||||||
|
);
|
||||||
|
"LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=arm64]" = (
|
||||||
|
"$(inherited)",
|
||||||
|
"../../target/aarch64-apple-ios-sim/release",
|
||||||
|
);
|
||||||
|
"LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=x86_64]" = (
|
||||||
|
"$(inherited)",
|
||||||
|
"../../target/x86_64-apple-ios/release",
|
||||||
);
|
);
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@ -346,7 +354,6 @@
|
|||||||
8265913A25816D964A847F1B /* Debug */ = {
|
8265913A25816D964A847F1B /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
IOS_TARGETS = "";
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
@ -376,9 +383,17 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
LIBRARY_SEARCH_PATHS = (
|
"LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=arm64]" = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
../../target/universal/debug,
|
"../../target/aarch64-apple-ios/debug",
|
||||||
|
);
|
||||||
|
"LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=arm64]" = (
|
||||||
|
"$(inherited)",
|
||||||
|
"../../target/aarch64-apple-ios-sim/debug",
|
||||||
|
);
|
||||||
|
"LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=x86_64]" = (
|
||||||
|
"$(inherited)",
|
||||||
|
"../../target/x86_64-apple-ios/debug",
|
||||||
);
|
);
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@ -394,7 +409,6 @@
|
|||||||
FEA9B18D9236F9F6DC6DF799 /* Release */ = {
|
FEA9B18D9236F9F6DC6DF799 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
IOS_TARGETS = "";
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
|
@ -1,12 +1,54 @@
|
|||||||
#!/bin/sh
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -e
|
# based on https://github.com/mozilla/glean/blob/main/build-scripts/xc-universal-binary.sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
PATH=$PATH:$HOME/.cargo/bin
|
PATH=$PATH:$HOME/.cargo/bin
|
||||||
|
|
||||||
# If you want your build to run faster, add a "--targets x86_64-apple-ios" for just using the ios simulator.
|
RELFLAG=
|
||||||
if [ -n ${IOS_TARGETS} ]; then
|
if [[ "$CONFIGURATION" != "Debug" ]]; then
|
||||||
cargo lipo --targets ${IOS_TARGETS}
|
RELFLAG=--release
|
||||||
else
|
|
||||||
cargo lipo
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
set -euvx
|
||||||
|
|
||||||
|
# add path to the system SDK, needed since macOS 11
|
||||||
|
if [ -z ${LIBRARY_PATH+x} ]; then
|
||||||
|
export LIBRARY_PATH="$(xcrun --show-sdk-path)/usr/lib"
|
||||||
|
else
|
||||||
|
export LIBRARY_PATH="$LIBRARY_PATH:$(xcrun --show-sdk-path)/usr/lib"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# add homebrew bin path, as it's the most commonly used package manager on macOS
|
||||||
|
# this is needed for cmake on apple arm processors as it's not available by default
|
||||||
|
export PATH="$PATH:/opt/homebrew/bin"
|
||||||
|
|
||||||
|
IS_SIMULATOR=0
|
||||||
|
if [ "${LLVM_TARGET_TRIPLE_SUFFIX-}" = "-simulator" ]; then
|
||||||
|
IS_SIMULATOR=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for arch in $ARCHS; do
|
||||||
|
case "$arch" in
|
||||||
|
x86_64)
|
||||||
|
if [ $IS_SIMULATOR -eq 0 ]; then
|
||||||
|
echo "Building for x86_64, but not a simulator build. What's going on?" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Intel iOS simulator
|
||||||
|
export CFLAGS_x86_64_apple_ios="-target x86_64-apple-ios"
|
||||||
|
cargo build --lib $RELFLAG --target x86_64-apple-ios
|
||||||
|
;;
|
||||||
|
|
||||||
|
arm64)
|
||||||
|
if [ $IS_SIMULATOR -eq 0 ]; then
|
||||||
|
# Hardware iOS targets
|
||||||
|
cargo build --lib $RELFLAG --target aarch64-apple-ios
|
||||||
|
else
|
||||||
|
# M1 iOS simulator -- currently in Nightly only and requires to build `libstd`
|
||||||
|
cargo build --lib $RELFLAG --target aarch64-apple-ios-sim
|
||||||
|
fi
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
@ -1,4 +1,21 @@
|
|||||||
use bevy::{prelude::*, window::WindowMode};
|
use bevy::{
|
||||||
|
audio::{Audio, AudioPlugin},
|
||||||
|
input::touch::TouchPhase,
|
||||||
|
math::{Vec2, Vec3},
|
||||||
|
pbr2::{PbrBundle, PointLight, PointLightBundle, StandardMaterial},
|
||||||
|
prelude::{
|
||||||
|
bevy_main, App, AssetServer, Assets, Commands, EventReader, Local, Query, Res, ResMut,
|
||||||
|
TouchInput, Transform, With,
|
||||||
|
},
|
||||||
|
render2::{
|
||||||
|
camera::{Camera, PerspectiveCameraBundle},
|
||||||
|
color::Color,
|
||||||
|
mesh::{shape, Mesh},
|
||||||
|
view::Msaa,
|
||||||
|
},
|
||||||
|
window::{WindowDescriptor, WindowMode, Windows},
|
||||||
|
PipelinedDefaultPlugins,
|
||||||
|
};
|
||||||
|
|
||||||
// the `bevy_main` proc_macro generates the required ios boilerplate
|
// the `bevy_main` proc_macro generates the required ios boilerplate
|
||||||
#[bevy_main]
|
#[bevy_main]
|
||||||
@ -11,11 +28,40 @@ fn main() {
|
|||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.insert_resource(Msaa { samples: 4 })
|
.insert_resource(Msaa { samples: 4 })
|
||||||
.add_plugins(DefaultPlugins)
|
.add_plugins(PipelinedDefaultPlugins)
|
||||||
|
.add_plugin(AudioPlugin)
|
||||||
.add_startup_system(setup_scene)
|
.add_startup_system(setup_scene)
|
||||||
.add_startup_system(setup_music)
|
.add_startup_system(setup_music)
|
||||||
|
.add_system(touch_camera)
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn touch_camera(
|
||||||
|
windows: ResMut<Windows>,
|
||||||
|
mut touches: EventReader<TouchInput>,
|
||||||
|
mut camera: Query<&mut Transform, With<Camera>>,
|
||||||
|
mut last_position: Local<Option<Vec2>>,
|
||||||
|
) {
|
||||||
|
for touch in touches.iter() {
|
||||||
|
if touch.phase == TouchPhase::Started {
|
||||||
|
*last_position = None;
|
||||||
|
}
|
||||||
|
if let Some(last_position) = *last_position {
|
||||||
|
let window = windows.get_primary().unwrap();
|
||||||
|
let mut transform = camera.single_mut();
|
||||||
|
*transform = Transform::from_xyz(
|
||||||
|
transform.translation.x
|
||||||
|
+ (touch.position.x - last_position.x) / window.width() * 5.0,
|
||||||
|
transform.translation.y,
|
||||||
|
transform.translation.z
|
||||||
|
+ (touch.position.y - last_position.y) / window.height() * 5.0,
|
||||||
|
)
|
||||||
|
.looking_at(Vec3::ZERO, Vec3::Y);
|
||||||
|
}
|
||||||
|
*last_position = Some(touch.position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// set up a simple 3D scene
|
/// set up a simple 3D scene
|
||||||
fn setup_scene(
|
fn setup_scene(
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
@ -48,6 +94,11 @@ fn setup_scene(
|
|||||||
// light
|
// light
|
||||||
commands.spawn_bundle(PointLightBundle {
|
commands.spawn_bundle(PointLightBundle {
|
||||||
transform: Transform::from_xyz(4.0, 8.0, 4.0),
|
transform: Transform::from_xyz(4.0, 8.0, 4.0),
|
||||||
|
point_light: PointLight {
|
||||||
|
intensity: 5000.0,
|
||||||
|
shadows_enabled: true,
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
// camera
|
// camera
|
||||||
|
Loading…
Reference in New Issue
Block a user