From b3bbd3f1882cef37f42eb88ffa6150a1ead2d0e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EB=AF=BC=EC=84=9C?= <49663640+JoMinSeo@users.noreply.github.com> Date: Fri, 12 Sep 2025 00:54:56 +0900 Subject: [PATCH 1/3] add macOS platform support - Add macOS example app and Xcode configuration - Configure pubspec.yaml for macOS compatibility - Create shell script for libthorvg.dylib generation --- .gitignore | 1 + example/.gitignore | 2 + example/macos/.gitignore | 7 + example/macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + example/macos/Podfile | 42 + example/macos/Podfile.lock | 22 + .../macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + example/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/1024-mac.png | Bin 0 -> 13304 bytes .../AppIcon.appiconset/128-mac.png | Bin 0 -> 1788 bytes .../AppIcon.appiconset/16-mac.png | Bin 0 -> 262 bytes .../AppIcon.appiconset/256-mac.png | Bin 0 -> 3474 bytes .../AppIcon.appiconset/32-mac.png | Bin 0 -> 600 bytes .../AppIcon.appiconset/512-mac.png | Bin 0 -> 6922 bytes .../AppIcon.appiconset/64-mac.png | Bin 0 -> 960 bytes .../AppIcon.appiconset/Contents.json | 1 + example/macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ example/macos/Runner/Configs/AppInfo.xcconfig | 14 + example/macos/Runner/Configs/Debug.xcconfig | 2 + example/macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 14 + example/macos/Runner/Info.plist | 32 + example/macos/Runner/MainFlutterWindow.swift | 15 + example/macos/Runner/Release.entitlements | 8 + example/macos/RunnerTests/RunnerTests.swift | 12 + lib/src/thorvg.dart | 2 +- lottie/flutter_build.macos.sh | 47 + macos/thorvg.podspec | 29 + pubspec.yaml | 2 + thorvg | 2 +- 37 files changed, 1563 insertions(+), 2 deletions(-) create mode 100644 example/macos/.gitignore create mode 100644 example/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 example/macos/Flutter/Flutter-Release.xcconfig create mode 100644 example/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 example/macos/Podfile create mode 100644 example/macos/Podfile.lock create mode 100644 example/macos/Runner.xcodeproj/project.pbxproj create mode 100644 example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 example/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/macos/Runner/AppDelegate.swift create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/1024-mac.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/128-mac.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/16-mac.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/256-mac.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/32-mac.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/512-mac.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/64-mac.png create mode 100644 example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 example/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 example/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 example/macos/Runner/Configs/Debug.xcconfig create mode 100644 example/macos/Runner/Configs/Release.xcconfig create mode 100644 example/macos/Runner/Configs/Warnings.xcconfig create mode 100644 example/macos/Runner/DebugProfile.entitlements create mode 100644 example/macos/Runner/Info.plist create mode 100644 example/macos/Runner/MainFlutterWindow.swift create mode 100644 example/macos/Runner/Release.entitlements create mode 100644 example/macos/RunnerTests/RunnerTests.swift create mode 100644 lottie/flutter_build.macos.sh create mode 100644 macos/thorvg.podspec diff --git a/.gitignore b/.gitignore index ceaa11d..fa69dbc 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ pubspec.lock # Generated binaries android/src/main/jniLibs/ ios/Frameworks/ +macos/Frameworks/ # Generated android build files(.cxx) android/app/.cxx diff --git a/example/.gitignore b/example/.gitignore index 29a3a50..79c113f 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/example/macos/.gitignore b/example/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/example/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/example/macos/Flutter/Flutter-Debug.xcconfig b/example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..4b81f9b --- /dev/null +++ b/example/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/macos/Flutter/Flutter-Release.xcconfig b/example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..5caa9d1 --- /dev/null +++ b/example/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/macos/Flutter/GeneratedPluginRegistrant.swift b/example/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..cccf817 --- /dev/null +++ b/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/example/macos/Podfile b/example/macos/Podfile new file mode 100644 index 0000000..29c8eb3 --- /dev/null +++ b/example/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/example/macos/Podfile.lock b/example/macos/Podfile.lock new file mode 100644 index 0000000..7c88f35 --- /dev/null +++ b/example/macos/Podfile.lock @@ -0,0 +1,22 @@ +PODS: + - FlutterMacOS (1.0.0) + - thorvg (1.0.0-beta.0): + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - thorvg (from `Flutter/ephemeral/.symlinks/plugins/thorvg/macos`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + thorvg: + :path: Flutter/ephemeral/.symlinks/plugins/thorvg/macos + +SPEC CHECKSUMS: + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + thorvg: cd85d234f639201c8d58d80ea923e136c6deffd7 + +PODFILE CHECKSUM: 7eb978b976557c8c1cd717d8185ec483fd090a82 + +COCOAPODS: 1.16.2 diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..9f7fa16 --- /dev/null +++ b/example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 0CDD634C9F8994CE5A822FBB /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD4097D29011A069F2FF44BD /* Pods_Runner.framework */; }; + 2E0AF6EEFA12758F6C9EA10A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE67816B6679FF896AAA5718 /* Pods_RunnerTests.framework */; }; + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 142A88506ED7BDD42DC7DE84 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 27B7636F4371C0660025856C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* thorvg_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = thorvg_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 66C2B7C0F3D80DD84F0B6FC2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 76660CE09B5F58EFAF904D02 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A97BE8E877D918583E8E4B96 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BD4097D29011A069F2FF44BD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E3A6D9F8476E1CB63639F501 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + EE67816B6679FF896AAA5718 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2E0AF6EEFA12758F6C9EA10A /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0CDD634C9F8994CE5A822FBB /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + 56A4B06D66228A3DDE1927FC /* Pods */, + D2A67D7D856D278E07900FA3 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* thorvg_example.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 56A4B06D66228A3DDE1927FC /* Pods */ = { + isa = PBXGroup; + children = ( + E3A6D9F8476E1CB63639F501 /* Pods-Runner.debug.xcconfig */, + A97BE8E877D918583E8E4B96 /* Pods-Runner.release.xcconfig */, + 27B7636F4371C0660025856C /* Pods-Runner.profile.xcconfig */, + 66C2B7C0F3D80DD84F0B6FC2 /* Pods-RunnerTests.debug.xcconfig */, + 76660CE09B5F58EFAF904D02 /* Pods-RunnerTests.release.xcconfig */, + 142A88506ED7BDD42DC7DE84 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D2A67D7D856D278E07900FA3 /* Frameworks */ = { + isa = PBXGroup; + children = ( + BD4097D29011A069F2FF44BD /* Pods_Runner.framework */, + EE67816B6679FF896AAA5718 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 5832196F91FD65A30E551F33 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 90686D2CCA86E6AE054D3A0D /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + 5A43AA3DE4C7815C36BC612E /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* thorvg_example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 5832196F91FD65A30E551F33 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 5A43AA3DE4C7815C36BC612E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 90686D2CCA86E6AE054D3A0D /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 66C2B7C0F3D80DD84F0B6FC2 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.thorvg.app.thorvgExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/thorvg_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/thorvg_example"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 76660CE09B5F58EFAF904D02 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.thorvg.app.thorvgExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/thorvg_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/thorvg_example"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 142A88506ED7BDD42DC7DE84 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.thorvg.app.thorvgExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/thorvg_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/thorvg_example"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..4112dd5 --- /dev/null +++ b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/example/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/macos/Runner/AppDelegate.swift b/example/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..b3c1761 --- /dev/null +++ b/example/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/1024-mac.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/1024-mac.png new file mode 100644 index 0000000000000000000000000000000000000000..c55842032d3b256dd8e7e07e2b27d14534338830 GIT binary patch literal 13304 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 b5 literal 0 HcmV?d00001 diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/128-mac.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/128-mac.png new file mode 100644 index 0000000000000000000000000000000000000000..d24ae3ac5eab284b4434699b40d9b1a0150ba9ec GIT binary patch literal 1788 zcmV+qP}nwrwLL<9!!{$gGIHuI(^)d_8=k34ZrSA%Lbn*Rb*X*-!3oxc)7MNt;mo!-V!nwQyohv*w z*f$QH2C!AiGK_uvj}o2p3@vIHDTekgr{vC>7%-JFz!qOh&Xb}#o+7=Ie%KYT6|rbv zBIP8hNRnhO-8eFAB`n5zO3sT^L`nHvuTBbE0fTW~(=QaMsFG5yk0ygHEkoBc%0()= zq;kD6DolBo=@*fTFsWR(p=^t-Zq;mDamXcw-ujEBVn)3R2Dwr}1PEjr@+LY5J zrDT}=N0AW|Db4~D&f-8hQc-g{u?)0ck*A_guMb8>a~&QI zxJFLVFLWoucfBId*wO355kh4c_j@sVqJEhYSr~&k3Q-BrVlbhW6;t4~PPp~tQ&4Cd z*f18`s7Qg+?%{S!#lGQs#;eyKPt+(F6{cS!OM`%9$cu`DI< z-vEdH@5f>PYr=o_4*lEjkiY#7PToODVDePT0ZCvf`^o*q+c$Z8CvVSG92%}S6$gjg zSw#w*_77#SeJXmxZ7iRHLOZ~OT3Jki*G8c-EZ~&_YPoPz{3tSh%4b0q1{nQK`RLK> zlW`Edd8-OVztBU&1v5BOjFUE?Z{K}>rJLqURk#QpBbjAo4xoT?@Z2Co(>yoIYQ=J1YxzgjGM2lgP+Wa{6xl5o;*FKFaFv%TZ)Z zNYUx@4M%ODijC2hdQ>V%G8QCRNYAY_dK1;Gk2=e#KTCxt#m=Kh7F2QGT%$EmRWs7W z>)zod7KP`K#VS!8O7Fa+`!|_%WQz)SjWOM3SAVL(dS4W-GYjuE*e`F|cE&NgQEfB) zSW_+4d&v`@=IZeL^QW)abGd288o{FSwtLiZCYy7KwRhU@$P>;w@B9lctoQ{NoOjlV zNA17MdP~kd`M9GEvgpiO*YKl^G4^;9OgPa*6HhY9q}85e;)y1jaDws18FSPTx@zd? z%+wmqR=eF*`F6Y2Y}9Oq|2+m)P&gnA0{{Rp6#$(9Du4ih06uLllSQN=p_(~lEIuC;8rBK6ds7{zd(l^>4Jlpm*z$tv8LGgQ%*?0m$W`Wy!(FhAR{77 zvva;Rg)q-o@Pw4r@Oty?8?9h6$F~&rQ3dNq3!DSVwR?wzG0Bs~j{%}4UB6dy0092{ zt}6Ba|I0?G3qn6av;Y5?g28}3@B*Z_q9Ct?$nzRF)QW%;gb!SdxE_H~OpRonQm;clq(Vg}D zBkB*&=nCYUkRQc=5n|KMXzBWQBg@-iF$dM}*)aq4d$!T`Dpj-fNBUlnpEO~77WFdzJ4XXXRYhldE3 z&u=!*jT{TN5SQQnIc{`645J$(bU=hIuWD5W>KNvas1bD;&d5i@zo|6`D$uD0a9P0%p(2O^h)KoS_dNr2R0JE2zzD zHaT)Kr%+Fo(A6 zJGHaBR#1k4;om>Ejfa>Rmq#f7TiwYvCE?_@@c$>xAMpwNe`S9-+D77Nt)YSW@5BH9 zuby+FZ|%V#&iW(K{lE40o84OWYUZ^4_f6#wmH++!KQ3n7>sxo6ueQxU_?6{Oy7Wqm I!aYEn0WY^{o&W#< literal 0 HcmV?d00001 diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/256-mac.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/256-mac.png new file mode 100644 index 0000000000000000000000000000000000000000..15595089f2059fb69767b7e31236852072307988 GIT binary patch literal 3474 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 literal 0 HcmV?d00001 diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/512-mac.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/512-mac.png new file mode 100644 index 0000000000000000000000000000000000000000..fe5101ab01adf081b4e2a0bfd39ff362bacaa903 GIT binary patch literal 6922 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 literal 0 HcmV?d00001 diff --git a/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/64-mac.png b/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/64-mac.png new file mode 100644 index 0000000000000000000000000000000000000000..8159f9ea4787776aa0e53d62ba3cd5e1cf13b615 GIT binary patch literal 960 zcmV;x13&yyNk&Gv0{{S5MM6+kP&il$0000G0000#002J#06|PpNYeoT00E%8{l95D z`mVKN+evNPw$tTFW!p)Y&UR-znVD;}W83~4ve!P}Z*|t)d!1ny5fgy_7;PhGO&-R& zMm7(JNL^MIFe5h}zy9du8*jc@R#sM49#~dZR`%wbZ@hYZJ+T8QhX*T=aSf6Y?y+RAmT$OQ|AHRTEZG3bkQ1C0F}@OwHe3?f*+P ze|yy>S5?sW||WRE-<6X|sru9(F% zF*a&0Y%!qCwut|u=SEb2K1%bqYo+?O<;Bb&8E!%fx6nbfaQKbT-lur`4}9mUk7P*7hox zZ{erAs?&%o0nVIkFJ8@9UXNhcH@?^50{*4t=X4k27g9~H))@kOx=1N_kAt0;(k{|E zM{*>NuI(1lfLH!qyH^x5$>*matgzg2x;Et1|IyxlHrKtCe;t_yTYi69W@49Q9%(fx z$s_c&f(#R-w4Y8WYT)Uy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/macos/Runner/Configs/AppInfo.xcconfig b/example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..7715872 --- /dev/null +++ b/example/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = thorvg_example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = org.thorvg.app.thorvgExample + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 org.thorvg.app. All rights reserved. diff --git a/example/macos/Runner/Configs/Debug.xcconfig b/example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/example/macos/Runner/Configs/Release.xcconfig b/example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/example/macos/Runner/Configs/Warnings.xcconfig b/example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/example/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/example/macos/Runner/DebugProfile.entitlements b/example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..08c3ab1 --- /dev/null +++ b/example/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + com.apple.security.network.client + + + diff --git a/example/macos/Runner/Info.plist b/example/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/example/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/example/macos/Runner/MainFlutterWindow.swift b/example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..3cc05eb --- /dev/null +++ b/example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/example/macos/Runner/Release.entitlements b/example/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/example/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/example/macos/RunnerTests/RunnerTests.swift b/example/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..61f3bd1 --- /dev/null +++ b/example/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/lib/src/thorvg.dart b/lib/src/thorvg.dart index 91e1f66..4a2071f 100644 --- a/lib/src/thorvg.dart +++ b/lib/src/thorvg.dart @@ -11,7 +11,7 @@ import 'thorvg_bindings_generated.dart'; const String _libName = 'thorvg'; final DynamicLibrary _dylib = () { - if (Platform.isIOS) { + if (Platform.isIOS || Platform.isMacOS) { return DynamicLibrary.open('lib$_libName.dylib'); } if (Platform.isAndroid) { diff --git a/lottie/flutter_build.macos.sh b/lottie/flutter_build.macos.sh new file mode 100644 index 0000000..e1e2e7c --- /dev/null +++ b/lottie/flutter_build.macos.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +rm -rf build_flutter_macos + +# Build for aarch64 (Apple Silicon) +rm -rf build_flutter_aarch64 libthorvg.a +mkdir build_flutter_aarch64 + +cd ../thorvg +meson setup -Db_lto=true -Ddefault_library=static -Dloaders="lottie, png, jpg" -Dthreads=false --cross-file ../thorvg/cross/macos_arm64.txt ../lottie/build_flutter_aarch64 + +cd ../lottie +ninja -C build_flutter_aarch64 + +cp build_flutter_aarch64/src/libthorvg.a libthorvg.a +rm -rf build_flutter_aarch64/ + +meson setup -Db_lto=true -Ddefault_library=static --cross-file ../thorvg/cross/macos_arm64.txt build_flutter_aarch64 +ninja -C build_flutter_aarch64/ + +# Build for x86_64 (Intel) +rm -rf build_flutter_x86_64 libthorvg.a +mkdir build_flutter_x86_64 + +cd ../thorvg +meson setup -Db_lto=true -Ddefault_library=static -Dloaders="lottie, png, jpg" -Dthreads=false --cross-file ../thorvg/cross/macos_x86_64.txt ../lottie/build_flutter_x86_64 + +cd ../lottie +ninja -C build_flutter_x86_64 + +cp build_flutter_x86_64/src/libthorvg.a libthorvg.a +rm -rf build_flutter_x86_64/ + +meson setup -Db_lto=true -Ddefault_library=static --cross-file ../thorvg/cross/macos_x86_64.txt build_flutter_x86_64 +ninja -C build_flutter_x86_64/ + +rm -rf libthorvg.a + +mkdir build_flutter_macos + +# Create Universal Binary for macOS +lipo build_flutter_x86_64/libthorvg.dylib \ +build_flutter_aarch64/libthorvg.dylib \ +-output build_flutter_macos/libthorvg.dylib -create + +mkdir -p ../macos/Frameworks +cp build_flutter_macos/libthorvg.dylib ../macos/Frameworks/ \ No newline at end of file diff --git a/macos/thorvg.podspec b/macos/thorvg.podspec new file mode 100644 index 0000000..e4e8410 --- /dev/null +++ b/macos/thorvg.podspec @@ -0,0 +1,29 @@ +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. +# Run `pod lib lint thorvg.podspec` to validate before publishing. +# +Pod::Spec.new do |s| + s.name = 'thorvg' + s.version = '1.0.0' + s.summary = 'ThorVG for Flutter' + s.description = <<-DESC +ThorVG Flutter Runtime + DESC + s.homepage = 'https://github.com/thorvg/thorvg.flutter' + s.license = { :file => '../LICENSE' } + s.author = { 'Jinny You' => 'jinny@lottiefiles.com' } + + # This will ensure the source files in Classes/ are included in the native + # builds of apps using this FFI plugin. Podspec does not support relative + # paths, so Classes contains a forwarder C file that relatively imports + # `../src/*` so that the C sources can be shared among all target platforms. + s.source = { :path => '.' } + s.dependency 'FlutterMacOS' + s.platform = :osx, '10.14' + + s.libraries = ["c++", "z"] + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } + s.vendored_libraries = 'Frameworks/libthorvg.dylib' + + s.swift_version = '5.0' +end diff --git a/pubspec.yaml b/pubspec.yaml index ea094fc..58f252b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -26,3 +26,5 @@ flutter: ffiPlugin: true ios: ffiPlugin: true + macos: + ffiPlugin: true diff --git a/thorvg b/thorvg index 32c3804..9ba683a 160000 --- a/thorvg +++ b/thorvg @@ -1 +1 @@ -Subproject commit 32c38041db4bf4f6f566089fef0cdb0a37bd7bbe +Subproject commit 9ba683afe1cc20bc92c9f6d0da02f275c9001902 From 9a186e2f066a4e5756540d6af84ac20c899d966a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EB=AF=BC=EC=84=9C?= <49663640+JoMinSeo@users.noreply.github.com> Date: Sat, 18 Oct 2025 21:58:27 +0900 Subject: [PATCH 2/3] docs: add macOS platform support --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index e8b94c2..497fab3 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ This project provides the [ThorVG](https://github.com/thorvg/thorvg) runtime for | ------------- | ------------- | | Android | arm64-v8a, armeabi-v7a, x86_64 | | iOS | arm64, x86_64, x86_64(simulator) | +| macOS | arm64, x86_64 | ## Usage @@ -113,3 +114,13 @@ sh flutter_build.ios.sh Check whether this file is generated: - `ios/Frameworks/libthorvg.dylib` + +### macOS +```sh +# Build for Animation(Lottie) +cd lottie +sh flutter_build.macos.sh +``` + +Check whether this file is generated: +- `macos/Frameworks/libthorvg.dylib` From 73274c86019ced1ad4976e732d037fcb46631431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EB=AF=BC=EC=84=9C?= <49663640+JoMinSeo@users.noreply.github.com> Date: Fri, 24 Oct 2025 00:30:20 +0900 Subject: [PATCH 3/3] feat: add macOS Universal Binary build support - Add cross-compilation files and build script for macOS arm64/x86_64 --- cross/macos_arm64.txt | 23 +++++++++++++++++++++++ cross/macos_x86_64.txt | 23 +++++++++++++++++++++++ lottie/flutter_build.macos.sh | 12 +++++------- 3 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 cross/macos_arm64.txt create mode 100644 cross/macos_x86_64.txt diff --git a/cross/macos_arm64.txt b/cross/macos_arm64.txt new file mode 100644 index 0000000..4e09baf --- /dev/null +++ b/cross/macos_arm64.txt @@ -0,0 +1,23 @@ +# build for macOS Apple Silicon + +[binaries] +cpp = ['clang++', '-arch', 'arm64', '-isysroot', '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk'] +ar = 'ar' +strip = 'strip' + +[properties] +root = '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer' +has_function_printf = true + +[built-in options] +cpp_args = ['-mmacosx-version-min=10.14'] +cpp_link_args = ['-mmacosx-version-min=10.14'] + +[host_machine] +system = 'darwin' +subsystem = 'macos' +kernel = 'xnu' +cpu_family = 'aarch64' +cpu = 'aarch64' +endian = 'little' + diff --git a/cross/macos_x86_64.txt b/cross/macos_x86_64.txt new file mode 100644 index 0000000..0552058 --- /dev/null +++ b/cross/macos_x86_64.txt @@ -0,0 +1,23 @@ +# build for macOS Intel + +[binaries] +cpp = ['clang++', '-arch', 'x86_64', '-isysroot', '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk'] +ar = 'ar' +strip = 'strip' + +[properties] +root = '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer' +has_function_printf = true + +[built-in options] +cpp_args = ['-mmacosx-version-min=10.14'] +cpp_link_args = ['-mmacosx-version-min=10.14'] + +[host_machine] +system = 'darwin' +subsystem = 'macos' +kernel = 'xnu' +cpu_family = 'x86_64' +cpu = 'x86_64' +endian = 'little' + diff --git a/lottie/flutter_build.macos.sh b/lottie/flutter_build.macos.sh index e1e2e7c..a87b2eb 100644 --- a/lottie/flutter_build.macos.sh +++ b/lottie/flutter_build.macos.sh @@ -6,8 +6,7 @@ rm -rf build_flutter_macos rm -rf build_flutter_aarch64 libthorvg.a mkdir build_flutter_aarch64 -cd ../thorvg -meson setup -Db_lto=true -Ddefault_library=static -Dloaders="lottie, png, jpg" -Dthreads=false --cross-file ../thorvg/cross/macos_arm64.txt ../lottie/build_flutter_aarch64 +meson setup -Db_lto=true -Ddefault_library=static -Dloaders="lottie, png, jpg" -Dthreads=false --cross-file ../cross/macos_arm64.txt ../thorvg build_flutter_aarch64 cd ../lottie ninja -C build_flutter_aarch64 @@ -15,15 +14,14 @@ ninja -C build_flutter_aarch64 cp build_flutter_aarch64/src/libthorvg.a libthorvg.a rm -rf build_flutter_aarch64/ -meson setup -Db_lto=true -Ddefault_library=static --cross-file ../thorvg/cross/macos_arm64.txt build_flutter_aarch64 +meson setup -Db_lto=true -Ddefault_library=static --cross-file ../cross/macos_arm64.txt build_flutter_aarch64 ninja -C build_flutter_aarch64/ # Build for x86_64 (Intel) rm -rf build_flutter_x86_64 libthorvg.a mkdir build_flutter_x86_64 -cd ../thorvg -meson setup -Db_lto=true -Ddefault_library=static -Dloaders="lottie, png, jpg" -Dthreads=false --cross-file ../thorvg/cross/macos_x86_64.txt ../lottie/build_flutter_x86_64 +meson setup -Db_lto=true -Ddefault_library=static -Dloaders="lottie, png, jpg" -Dthreads=false --cross-file ../cross/macos_x86_64.txt ../thorvg build_flutter_x86_64 cd ../lottie ninja -C build_flutter_x86_64 @@ -31,7 +29,7 @@ ninja -C build_flutter_x86_64 cp build_flutter_x86_64/src/libthorvg.a libthorvg.a rm -rf build_flutter_x86_64/ -meson setup -Db_lto=true -Ddefault_library=static --cross-file ../thorvg/cross/macos_x86_64.txt build_flutter_x86_64 +meson setup -Db_lto=true -Ddefault_library=static --cross-file ../cross/macos_x86_64.txt build_flutter_x86_64 ninja -C build_flutter_x86_64/ rm -rf libthorvg.a @@ -44,4 +42,4 @@ build_flutter_aarch64/libthorvg.dylib \ -output build_flutter_macos/libthorvg.dylib -create mkdir -p ../macos/Frameworks -cp build_flutter_macos/libthorvg.dylib ../macos/Frameworks/ \ No newline at end of file +cp build_flutter_macos/libthorvg.dylib ../macos/Frameworks/