diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 061defc..ea1fd55 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -26,7 +26,7 @@ jobs:
- name: Generate Headers
run: |
- ./scripts/generate_headers.sh || true
+ ./scripts/generate_headers.sh 3.x || true
- name: Compile Plugins
run: |
diff --git a/README.md b/README.md
index 2e3656e..9cf5a7e 100644
--- a/README.md
+++ b/README.md
@@ -36,10 +36,18 @@ If you choose this option, you can skip next the step which generates Godot head
- To generate Godot headers, you need to run the compilation command inside the `godot` submodule directory:
+### For Godot 3.x:
+
```bash
scons platform=iphone target=debug
```
+### For Godot 4.x:
+
+```bash
+scons platform=ios target=debug
+```
+
You don't have to wait for full engine compilation, as header files are generated first.
Once the actual compilation starts, you can stop this command by pressing Ctrl + C.
diff --git a/SConstruct b/SConstruct
index 9dc9581..c943b12 100644
--- a/SConstruct
+++ b/SConstruct
@@ -82,11 +82,11 @@ env.Append(CCFLAGS=[
# '-Wextra',
])
-env.Append(CCFLAGS=['-arch', env['arch'], "-isysroot", "$IPHONESDK", "-stdlib=libc++", '-isysroot', sdk_path])
+env.Append(CCFLAGS=['-arch', env['arch'], "-isysroot", "$IOS_SDK_PATH", "-stdlib=libc++", '-isysroot', sdk_path])
env.Append(CCFLAGS=['-DPTRCALL_ENABLED'])
env.Prepend(CXXFLAGS=[
'-DNEED_LONG_INT', '-DLIBYUV_DISABLE_NEON',
- '-DIPHONE_ENABLED', '-DUNIX_ENABLED', '-DCOREAUDIO_ENABLED'
+ '-DIOS_ENABLED', '-DUNIX_ENABLED', '-DCOREAUDIO_ENABLED'
])
env.Append(LINKFLAGS=["-arch", env['arch'], '-isysroot', sdk_path, '-F' + sdk_path])
@@ -152,19 +152,26 @@ else:
quit();
# Adding header files
-env.Append(CPPPATH=[
- '.',
- 'godot',
- 'godot/platform/iphone',
-])
+if env['version'] == '3.x':
+ env.Append(CPPPATH=[
+ '.',
+ 'godot',
+ 'godot/platform/iphone',
+ ])
+else:
+ env.Append(CPPPATH=[
+ '.',
+ 'godot',
+ 'godot/platform/ios',
+ ])
# tweak this if you want to use different folders, or more folders, to store your source code in.
sources = Glob('plugins/' + env['plugin'] + '/*.cpp')
sources.append(Glob('plugins/' + env['plugin'] + '/*.mm'))
sources.append(Glob('plugins/' + env['plugin'] + '/*.m'))
-# lib.-..a
-library_platform = env["arch"] + "-" + ("simulator" if env["simulator"] else "iphone")
+# lib.-..a
+library_platform = env["arch"] + "-" + ("simulator" if env["simulator"] else "ios")
library_name = env['plugin'] + "." + library_platform + "." + env["target"] + ".a"
library = env.StaticLibrary(target=env['target_path'] + library_name, source=sources)
diff --git a/plugins/apn/apn.h b/plugins/apn/apn.h
index 1ad8662..2727049 100644
--- a/plugins/apn/apn.h
+++ b/plugins/apn/apn.h
@@ -31,7 +31,13 @@
#ifndef godot_apn_implementation_h
#define godot_apn_implementation_h
+#include "core/version.h"
+
+#if VERSION_MAJOR == 4
+#include "core/object/class_db.h"
+#else
#include "core/object.h"
+#endif
class APNPlugin : public Object {
GDCLASS(APNPlugin, Object);
diff --git a/plugins/apn/apn.mm b/plugins/apn/apn.mm
index 1efebf0..35f3325 100644
--- a/plugins/apn/apn.mm
+++ b/plugins/apn/apn.mm
@@ -32,8 +32,13 @@
#import
+#if VERSION_MAJOR == 4
+#include "core/object/class_db.h"
+#include "core/config/project_settings.h"
+#else
#include "core/class_db.h"
#include "core/project_settings.h"
+#endif
#import "godot_apn_delegate.h"
diff --git a/plugins/apn/apn_plugin.cpp b/plugins/apn/apn_plugin.cpp
index 5ab1914..14b8e8e 100644
--- a/plugins/apn/apn_plugin.cpp
+++ b/plugins/apn/apn_plugin.cpp
@@ -31,7 +31,11 @@
#import "apn_plugin.h"
#import "apn.h"
+#if VERSION_MAJOR == 4
+#import "core/config/engine.h"
+#else
#import "core/engine.h"
+#endif
APNPlugin *plugin;
diff --git a/plugins/apn/godot_apn_delegate.mm b/plugins/apn/godot_apn_delegate.mm
index 0c09916..7b240be 100644
--- a/plugins/apn/godot_apn_delegate.mm
+++ b/plugins/apn/godot_apn_delegate.mm
@@ -33,7 +33,12 @@
#include "apn.h"
#import "godot_user_notification_delegate.h"
+
+#if VERSION_MAJOR == 4
+#import "platform/ios/godot_app_delegate.h"
+#else
#import "platform/iphone/godot_app_delegate.h"
+#endif
struct APNSInitializer {
diff --git a/plugins/apn/godot_app_delegate_extension.h b/plugins/apn/godot_app_delegate_extension.h
index d18f8b8..6d61a9c 100644
--- a/plugins/apn/godot_app_delegate_extension.h
+++ b/plugins/apn/godot_app_delegate_extension.h
@@ -28,7 +28,13 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
+#include "core/version.h"
+
+#if VERSION_MAJOR == 4
+#import "platform/ios/godot_app_delegate.h"
+#else
#import "platform/iphone/godot_app_delegate.h"
+#endif
@interface GodotApplicalitionDelegate (PushNotifications)
diff --git a/plugins/arkit/arkit_interface.h b/plugins/arkit/arkit_interface.h
index 58da5c5..3745c97 100644
--- a/plugins/arkit/arkit_interface.h
+++ b/plugins/arkit/arkit_interface.h
@@ -60,7 +60,7 @@ typedef PoolVector GodotUInt8Vector;
/**
@author Bastiaan Olij
- ARKit interface between iPhone and Godot
+ ARKit interface between iOS and Godot
*/
// forward declaration for some needed objects
@@ -142,7 +142,7 @@ class ARKitInterface : public GodotBaseARInterface {
virtual void process() GODOT_ARKIT_OVERRIDE;
- // called by delegate (void * because C++ and Obj-C don't always mix, should really change all platform/iphone/*.cpp files to .mm)
+ // called by delegate (void * because C++ and Obj-C don't always mix, should really change all platform/ios/*.cpp files to .mm)
void _add_or_update_anchor(GodotARAnchor *p_anchor);
void _remove_anchor(GodotARAnchor *p_anchor);
diff --git a/plugins/camera/camera_ios.mm b/plugins/camera/camera_ios.mm
index 21528fb..1808fd5 100644
--- a/plugins/camera/camera_ios.mm
+++ b/plugins/camera/camera_ios.mm
@@ -28,7 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-///@TODO this is a near duplicate of CameraOSX, we should find a way to combine those to minimize code duplication!!!!
+///@TODO this is a near duplicate of CameraMacOS, we should find a way to combine those to minimize code duplication!!!!
// If you fix something here, make sure you fix it there as wel!
#include "camera_ios.h"
@@ -182,12 +182,12 @@ - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CM
#if VERSION_MAJOR == 4
uint8_t *w = img_data[0].ptrw();
memcpy(w, dataY, new_width * new_height);
+ img[0].instantiate();
#else
GodotUInt8Vector::Write w = img_data[0].write();
memcpy(w.ptr(), dataY, new_width * new_height);
-#endif
-
img[0].instance();
+#endif
img[0]->create(new_width, new_height, 0, Image::FORMAT_R8, img_data[0]);
}
@@ -205,13 +205,14 @@ - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CM
#if VERSION_MAJOR == 4
uint8_t *w = img_data[1].ptrw();
memcpy(w, dataCbCr, 2 * new_width * new_height);
+ img[1].instantiate();
#else
GodotUInt8Vector::Write w = img_data[1].write();
memcpy(w.ptr(), dataCbCr, 2 * new_width * new_height);
+ img[1].instance();
#endif
///TODO GLES2 doesn't support FORMAT_RG8, need to do some form of conversion
- img[1].instance();
img[1]->create(new_width, new_height, 0, Image::FORMAT_RG8, img_data[1]);
}
@@ -358,7 +359,7 @@ - (void)dealloc {
MyDeviceNotifications *device_notifications = nil;
//////////////////////////////////////////////////////////////////////////
-// CameraIOS - Subclass for our camera server on iPhone
+// CameraIOS - Subclass for our camera server on iOS
void CameraIOS::update_feeds() {
// this way of doing things is deprecated but still works,
@@ -410,7 +411,11 @@ - (void)dealloc {
if (!found) {
Ref newfeed;
+#if VERSION_MAJOR == 4
+ newfeed.instantiate();
+#else
newfeed.instance();
+#endif
newfeed->set_device(device);
add_feed(newfeed);
}
diff --git a/plugins/gamecenter/game_center.mm b/plugins/gamecenter/game_center.mm
index d57fb77..f027ab7 100644
--- a/plugins/gamecenter/game_center.mm
+++ b/plugins/gamecenter/game_center.mm
@@ -31,8 +31,14 @@
#include "game_center.h"
#import "game_center_delegate.h"
+
+#if VERSION_MAJOR == 4
+#import "platform/ios/app_delegate.h"
+#import "platform/ios/view_controller.h"
+#else
#import "platform/iphone/app_delegate.h"
#import "platform/iphone/view_controller.h"
+#endif
#import
diff --git a/plugins/icloud/icloud.mm b/plugins/icloud/icloud.mm
index fbcff6b..20ab2f1 100644
--- a/plugins/icloud/icloud.mm
+++ b/plugins/icloud/icloud.mm
@@ -30,7 +30,11 @@
#include "icloud.h"
+#if VERSION_MAJOR == 4
+#import "platform/ios/app_delegate.h"
+#else
#import "platform/iphone/app_delegate.h"
+#endif
#import
diff --git a/plugins/photo_picker/photo_picker.h b/plugins/photo_picker/photo_picker.h
index 707f0f0..621f2f2 100644
--- a/plugins/photo_picker/photo_picker.h
+++ b/plugins/photo_picker/photo_picker.h
@@ -33,8 +33,13 @@
#include "core/version.h"
+#if VERSION_MAJOR == 4
+#include "core/io/image.h"
+#include "core/object/object.h"
+#else
#include "core/image.h"
#include "core/object.h"
+#endif
#ifdef __OBJC__
@class GodotPhotoPicker;
diff --git a/plugins/photo_picker/photo_picker.mm b/plugins/photo_picker/photo_picker.mm
index 0721697..8550c8e 100644
--- a/plugins/photo_picker/photo_picker.mm
+++ b/plugins/photo_picker/photo_picker.mm
@@ -33,8 +33,13 @@
#import
#import
+#if VERSION_MAJOR == 4
+#import "platform/ios/app_delegate.h"
+#import "platform/ios/view_controller.h"
+#else
#import "platform/iphone/app_delegate.h"
#import "platform/iphone/view_controller.h"
+#endif
PhotoPicker *instance = NULL;
@@ -183,12 +188,21 @@ - (void)imagePickerController:(UIImagePickerController *)picker didFinishPicking
if (data) {
Ref img;
+#if VERSION_MAJOR == 4
+ Vector img_data;
+ img_data.resize(length);
+ uint8_t* w = img_data.ptrw();
+ memcpy(w, data, length);
+
+ img.instantiate();
+#else
PoolVector img_data;
img_data.resize(length);
PoolVector::Write w = img_data.write();
memcpy(w.ptr(), data, length);
img.instance();
+#endif
img->create(image.size.width * image.scale, image.size.height * image.scale, 0, Image::FORMAT_RGBA8, img_data);
PhotoPicker::get_singleton()->select_image(img);
diff --git a/plugins/photo_picker/photo_picker_module.cpp b/plugins/photo_picker/photo_picker_module.cpp
index f526d87..2cd070b 100644
--- a/plugins/photo_picker/photo_picker_module.cpp
+++ b/plugins/photo_picker/photo_picker_module.cpp
@@ -30,7 +30,14 @@
#include "photo_picker_module.h"
+#include "core/version.h"
+
+#if VERSION_MAJOR == 4
+#include "core/config/engine.h"
+#else
#include "core/engine.h"
+#endif
+
#include "core/version.h"
#include "photo_picker.h"
diff --git a/scripts/generate_headers.sh b/scripts/generate_headers.sh
index fa30ef2..f2610a7 100755
--- a/scripts/generate_headers.sh
+++ b/scripts/generate_headers.sh
@@ -1,3 +1,9 @@
#!/bin/bash
-cd ./godot && \
- ./../scripts/timeout scons platform=iphone target=release_debug
+if [[ "$1" == "3.x" ]];
+then
+ cd ./godot && \
+ ./../scripts/timeout scons platform=iphone target=release_debug
+else
+ cd ./godot && \
+ ./../scripts/timeout scons platform=ios target=release_debug
+fi
diff --git a/scripts/generate_static_library.sh b/scripts/generate_static_library.sh
index 5f6f7bd..972bc6c 100755
--- a/scripts/generate_static_library.sh
+++ b/scripts/generate_static_library.sh
@@ -11,8 +11,8 @@ scons target=$2 arch=armv7 plugin=$1 version=$3
scons target=$2 arch=x86_64 simulator=yes plugin=$1 version=$3
# Creating a fat libraries for device and simulator
-# lib.-..a
+# lib.-..a
lipo -create "./bin/lib$1.x86_64-simulator.$2.a" \
- "./bin/lib$1.armv7-iphone.$2.a" \
- "./bin/lib$1.arm64-iphone.$2.a" \
+ "./bin/lib$1.armv7-ios.$2.a" \
+ "./bin/lib$1.arm64-ios.$2.a" \
-output "./bin/$1.$2.a"
\ No newline at end of file
diff --git a/scripts/generate_xcframework.sh b/scripts/generate_xcframework.sh
index 57b44a6..67b97e9 100755
--- a/scripts/generate_xcframework.sh
+++ b/scripts/generate_xcframework.sh
@@ -13,9 +13,9 @@ scons target=$2 arch=x86_64 simulator=yes plugin=$1 version=$3
scons target=$2 arch=arm64 simulator=yes plugin=$1 version=$3
# Creating a fat libraries for device and simulator
-# lib.-..a
+# lib.-..a
lipo -create "./bin/lib$1.x86_64-simulator.$2.a" "./bin/lib$1.arm64-simulator.$2.a" -output "./bin/$1-simulator.$2.a"
-lipo -create "./bin/lib$1.armv7-iphone.$2.a" "./bin/lib$1.arm64-iphone.$2.a" -output "./bin/$1-device.$2.a"
+lipo -create "./bin/lib$1.armv7-ios.$2.a" "./bin/lib$1.arm64-ios.$2.a" -output "./bin/$1-device.$2.a"
# Creating a xcframework
xcodebuild -create-xcframework \