[ios_platform_images] migrate objC to swift (#4847)
`ios_platform_images` part of https://github.com/flutter/flutter/issues/119101
Migrate ios_platform_images to Swift.
diff --git a/packages/ios_platform_images/AUTHORS b/packages/ios_platform_images/AUTHORS
index 493a0b4..0d1bfa6 100644
--- a/packages/ios_platform_images/AUTHORS
+++ b/packages/ios_platform_images/AUTHORS
@@ -64,3 +64,4 @@
Anton Borries <mail@antonborri.es>
Alex Li <google@alexv525.com>
Rahul Raj <64.rahulraj@gmail.com>
+Mairramer <mairramer.dasilva28@hotmail.com>
diff --git a/packages/ios_platform_images/CHANGELOG.md b/packages/ios_platform_images/CHANGELOG.md
index 0025950..82b3b09 100644
--- a/packages/ios_platform_images/CHANGELOG.md
+++ b/packages/ios_platform_images/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.2.3
+
+* Migrates to a Swift implementation.
+
## 0.2.2+3
* Converts platform communication to Pigeon.
diff --git a/packages/ios_platform_images/README.md b/packages/ios_platform_images/README.md
index 9265b10..69dc63a 100644
--- a/packages/ios_platform_images/README.md
+++ b/packages/ios_platform_images/README.md
@@ -32,15 +32,15 @@
}
```
-`IosPlatformImages.load` functions like [[UIImage imageNamed:]](https://developer.apple.com/documentation/uikit/uiimage/1624146-imagenamed).
+`IosPlatformImages.load` works similarly to [`UIImage(named:)`](https://developer.apple.com/documentation/uikit/uiimage/1624146-imagenamed).
### Flutter->iOS Example
-```objc
-#import <ios_platform_images/UIImage+ios_platform_images.h>
+```swift
+import ios_platform_images
-static UIImageView* MakeImage() {
- UIImage* image = [UIImage flutterImageWithName:@"assets/foo.png"];
- return [[UIImageView alloc] initWithImage:image];
+func makeImage() -> UIImageView {
+ let image = UIImage.flutterImageWithName("assets/foo.png")
+ return UIImageView(image: image)
}
```
diff --git a/packages/ios_platform_images/example/ios/Runner.xcodeproj/project.pbxproj b/packages/ios_platform_images/example/ios/Runner.xcodeproj/project.pbxproj
index ba03518..0813ac0 100644
--- a/packages/ios_platform_images/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/ios_platform_images/example/ios/Runner.xcodeproj/project.pbxproj
@@ -8,16 +8,17 @@
/* Begin PBXBuildFile section */
0DE21BF72447752100097E3A /* textfile in Resources */ = {isa = PBXBuildFile; fileRef = 0DE21BF62447752100097E3A /* textfile */; };
+ 101538FD877087FE0BE2EA00 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70ED43CFA0E2E576A8AB8B24 /* Pods_Runner.framework */; };
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
- 33B0E32C2AB348FF0006F0C1 /* UIImage+ios_platform_imagesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33B0E32B2AB348FF0006F0C1 /* UIImage+ios_platform_imagesTests.m */; };
+ 3131C9A32ADEFDA9000703FA /* UIImage+ios_platform_imagesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3131C9A22ADEFDA8000703FA /* UIImage+ios_platform_imagesTests.m */; };
+ 31DC4A212AA8CC9300781E88 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 937254B9D43BF2078EE3DE65 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A144F620445D38CD0FEB7B8E /* Pods_RunnerTests.framework */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
- A30D9778BC0D4D09580CF4BE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 906079E3CC5A6FAB808EAF1E /* Pods_Runner.framework */; };
- F76AC1C1266713D00040C8BC /* IosPlatformImagesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F76AC1C0266713D00040C8BC /* IosPlatformImagesTests.m */; };
- FC73B055B2CD2E32A3E50B27 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD2C5EF0E06B6EC7EBCB922C /* Pods_RunnerTests.framework */; };
+ F76AC1C1266713D00040C8BC /* IosPlatformImagesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76AC1C0266713D00040C8BC /* IosPlatformImagesTests.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -49,14 +50,14 @@
0EF1CD9A3A3064B5289EF22E /* 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 = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
- 33B0E32B2AB348FF0006F0C1 /* UIImage+ios_platform_imagesTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImage+ios_platform_imagesTests.m"; sourceTree = "<group>"; };
+ 33B0E32B2AB348FF0006F0C1 /* UIImage+ios_platform_imagesTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImage+ios_platform_imagesTests.m"; sourceTree = "<group>"; }; 3153765C2AAA95AD009694AF /* libios_platform_images.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libios_platform_images.a; sourceTree = BUILT_PRODUCTS_DIR; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
4B56C310C5932F84CD6C17AC /* 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 = "<group>"; };
+ 70ED43CFA0E2E576A8AB8B24 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
80830F517E3E8B75B2D3AC0A /* 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 = "<group>"; };
- 906079E3CC5A6FAB808EAF1E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -64,11 +65,11 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
- AD2C5EF0E06B6EC7EBCB922C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A144F620445D38CD0FEB7B8E /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D1A761179BC59B1BAEE63036 /* 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 = "<group>"; };
D36FEDC657E1CE88220062D7 /* 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 = "<group>"; };
F76AC1BE266713D00040C8BC /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- F76AC1C0266713D00040C8BC /* IosPlatformImagesTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IosPlatformImagesTests.m; sourceTree = "<group>"; };
+ F76AC1C0266713D00040C8BC /* IosPlatformImagesTests.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = IosPlatformImagesTests.swift; sourceTree = "<group>"; };
F76AC1C2266713D00040C8BC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -77,7 +78,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- A30D9778BC0D4D09580CF4BE /* Pods_Runner.framework in Frameworks */,
+ 101538FD877087FE0BE2EA00 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -85,7 +86,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- FC73B055B2CD2E32A3E50B27 /* Pods_RunnerTests.framework in Frameworks */,
+ 937254B9D43BF2078EE3DE65 /* Pods_RunnerTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -156,8 +157,9 @@
DBEBA2309FD49D5C34798105 /* Frameworks */ = {
isa = PBXGroup;
children = (
- 906079E3CC5A6FAB808EAF1E /* Pods_Runner.framework */,
- AD2C5EF0E06B6EC7EBCB922C /* Pods_RunnerTests.framework */,
+ 3153765C2AAA95AD009694AF /* libios_platform_images.a */,
+ 70ED43CFA0E2E576A8AB8B24 /* Pods_Runner.framework */,
+ A144F620445D38CD0FEB7B8E /* Pods_RunnerTests.framework */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -165,9 +167,9 @@
F76AC1BF266713D00040C8BC /* RunnerTests */ = {
isa = PBXGroup;
children = (
- F76AC1C0266713D00040C8BC /* IosPlatformImagesTests.m */,
+ 3131C9A22ADEFDA8000703FA /* UIImage+ios_platform_imagesTests.m */,
+ F76AC1C0266713D00040C8BC /* IosPlatformImagesTests.swift */,
F76AC1C2266713D00040C8BC /* Info.plist */,
- 33B0E32B2AB348FF0006F0C1 /* UIImage+ios_platform_imagesTests.m */,
);
path = RunnerTests;
sourceTree = "<group>";
@@ -186,7 +188,7 @@
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
- 54C54D6BB826835E8AB0FA51 /* [CP] Embed Pods Frameworks */,
+ B747922D12365ABBBA69BEA8 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -232,6 +234,7 @@
F76AC1BD266713D00040C8BC = {
CreatedOnToolsVersion = 12.5;
DevelopmentTeam = S8QB4VV633;
+ LastSwiftMigration = 1410;
ProvisioningStyle = Automatic;
TestTargetID = 97C146ED1CF9000F007C117D;
};
@@ -273,6 +276,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 31DC4A212AA8CC9300781E88 /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -295,26 +299,6 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
- 54C54D6BB826835E8AB0FA51 /* [CP] Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
- "${BUILT_PRODUCTS_DIR}/integration_test/integration_test.framework",
- "${BUILT_PRODUCTS_DIR}/ios_platform_images/ios_platform_images.framework",
- );
- name = "[CP] Embed Pods Frameworks";
- outputPaths = (
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/integration_test.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ios_platform_images.framework",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
73331024E8B67D581A0862F0 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -339,8 +323,7 @@
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
- alwaysOutOfDate = 1;
- buildActionMask = 2147483647;
+ buildActionMask = 12;
files = (
);
inputPaths = (
@@ -350,7 +333,25 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n";
+ };
+ B747922D12365ABBBA69BEA8 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
+ "${BUILT_PRODUCTS_DIR}/ios_platform_images/ios_platform_images.framework",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ios_platform_images.framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
};
C102F13F37851E08F0608EE5 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
@@ -390,8 +391,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 33B0E32C2AB348FF0006F0C1 /* UIImage+ios_platform_imagesTests.m in Sources */,
- F76AC1C1266713D00040C8BC /* IosPlatformImagesTests.m in Sources */,
+ 3131C9A32ADEFDA9000703FA /* UIImage+ios_platform_imagesTests.m in Sources */,
+ F76AC1C1266713D00040C8BC /* IosPlatformImagesTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -448,6 +449,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -466,7 +468,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -527,6 +529,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -551,7 +554,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -582,6 +585,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -600,10 +604,11 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
@@ -674,8 +679,14 @@
baseConfigurationReference = 0B20D3254D8E1A2B01D83810 /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = S8QB4VV633;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"${PODS_CONFIGURATION_BUILD_DIR}/ios_platform_images/ios_platform_images.framework/Headers\"",
+ $CONFIGURATION_TEMP_DIR/YourProject.build/DerivedSources,
+ );
INFOPLIST_FILE = RunnerTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -684,6 +695,8 @@
);
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
};
name = Debug;
@@ -693,8 +706,14 @@
baseConfigurationReference = D36FEDC657E1CE88220062D7 /* Pods-RunnerTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = S8QB4VV633;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"${PODS_CONFIGURATION_BUILD_DIR}/ios_platform_images/ios_platform_images.framework/Headers\"",
+ $CONFIGURATION_TEMP_DIR/YourProject.build/DerivedSources,
+ );
INFOPLIST_FILE = RunnerTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -703,6 +722,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
};
name = Release;
@@ -712,8 +732,14 @@
baseConfigurationReference = 80830F517E3E8B75B2D3AC0A /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = S8QB4VV633;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"${PODS_CONFIGURATION_BUILD_DIR}/ios_platform_images/ios_platform_images.framework/Headers\"",
+ $CONFIGURATION_TEMP_DIR/YourProject.build/DerivedSources,
+ );
INFOPLIST_FILE = RunnerTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -722,6 +748,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
};
name = Profile;
diff --git a/packages/ios_platform_images/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/ios_platform_images/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/packages/ios_platform_images/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IDEDidComputeMac32BitWarning</key>
+ <true/>
+</dict>
+</plist>
diff --git a/packages/ios_platform_images/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/ios_platform_images/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 51e700a..4269597 100644
--- a/packages/ios_platform_images/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/packages/ios_platform_images/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -20,6 +20,20 @@
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "NO"
+ buildForProfiling = "NO"
+ buildForArchiving = "NO"
+ buildForAnalyzing = "NO">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "F76AC1BD266713D00040C8BC"
+ BuildableName = "RunnerTests.xctest"
+ BlueprintName = "RunnerTests"
+ ReferencedContainer = "container:Runner.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
diff --git a/packages/ios_platform_images/example/ios/Runner/AppDelegate.swift b/packages/ios_platform_images/example/ios/Runner/AppDelegate.swift
index caf9983..d83c0ff 100644
--- a/packages/ios_platform_images/example/ios/Runner/AppDelegate.swift
+++ b/packages/ios_platform_images/example/ios/Runner/AppDelegate.swift
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import UIKit
import Flutter
+import UIKit
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
diff --git a/packages/ios_platform_images/example/ios/RunnerTests/IosPlatformImagesTests.m b/packages/ios_platform_images/example/ios/RunnerTests/IosPlatformImagesTests.m
deleted file mode 100644
index c95c6ad..0000000
--- a/packages/ios_platform_images/example/ios/RunnerTests/IosPlatformImagesTests.m
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-@import ios_platform_images;
-@import XCTest;
-
-@interface IosPlatformImagesTests : XCTestCase
-@end
-
-@implementation IosPlatformImagesTests
-
-- (void)testPlugin {
- IosPlatformImagesPlugin *plugin = [[IosPlatformImagesPlugin alloc] init];
- XCTAssertNotNil(plugin);
-}
-
-@end
diff --git a/packages/ios_platform_images/example/ios/RunnerTests/IosPlatformImagesTests.swift b/packages/ios_platform_images/example/ios/RunnerTests/IosPlatformImagesTests.swift
new file mode 100644
index 0000000..618a4cf
--- /dev/null
+++ b/packages/ios_platform_images/example/ios/RunnerTests/IosPlatformImagesTests.swift
@@ -0,0 +1,48 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import Flutter
+import XCTest
+
+@testable import ios_platform_images
+
+class IosPlatformImagesTests: XCTestCase {
+ let plugin = IosPlatformImagesPlugin()
+
+ func testLoadImage() {
+ let assetName = "flutter"
+ let imageData = plugin.loadImage(name: assetName)
+
+ XCTAssertNotNil(imageData)
+ XCTAssertNotNil(imageData?.data)
+ }
+
+ func testLoadImageNotFound() {
+ let assetName = "notFound"
+ let imageData = plugin.loadImage(name: assetName)
+
+ XCTAssertNil(imageData)
+ }
+
+ func testResolveURL() {
+ let resourceName = "textfile"
+ do {
+ let url = try plugin.resolveUrl(resourceName: resourceName, extension: nil)
+ XCTAssertNotNil(url)
+ XCTAssertTrue(url?.contains(resourceName) ?? false)
+ } catch {
+ XCTFail("Error while resolving URL: \(error)")
+ }
+ }
+
+ func testResolveURLNotFound() {
+ do {
+ let url = try plugin.resolveUrl(resourceName: "notFound", extension: nil)
+ XCTAssertNil(url)
+ } catch {
+ XCTFail("Error while resolving URL: \(error)")
+ }
+ }
+
+}
diff --git a/packages/ios_platform_images/ios/Classes/IosPlatformImagesPlugin.h b/packages/ios_platform_images/ios/Classes/IosPlatformImagesPlugin.h
deleted file mode 100644
index b5dcc7b..0000000
--- a/packages/ios_platform_images/ios/Classes/IosPlatformImagesPlugin.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import <Flutter/Flutter.h>
-
-#import "messages.g.h"
-
-/// A plugin for Flutter that allows Flutter to load images in a platform
-/// specific way on iOS.
-@interface IosPlatformImagesPlugin : NSObject <FlutterPlugin, FPIPlatformImagesApi>
-@end
diff --git a/packages/ios_platform_images/ios/Classes/IosPlatformImagesPlugin.m b/packages/ios_platform_images/ios/Classes/IosPlatformImagesPlugin.m
deleted file mode 100644
index b41ff99..0000000
--- a/packages/ios_platform_images/ios/Classes/IosPlatformImagesPlugin.m
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import "IosPlatformImagesPlugin.h"
-
-#if !__has_feature(objc_arc)
-#error ARC must be enabled!
-#endif
-
-@interface IosPlatformImagesPlugin ()
-@end
-
-@implementation IosPlatformImagesPlugin
-
-+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar {
- FPIPlatformImagesApiSetup(registrar.messenger, [[IosPlatformImagesPlugin alloc] init]);
-}
-
-- (nullable FPIPlatformImageData *)
- loadImageWithName:(nonnull NSString *)name
- error:(FlutterError *_Nullable __autoreleasing *_Nonnull)error {
- UIImage *image = [UIImage imageNamed:name];
- NSData *data = UIImagePNGRepresentation(image);
- if (!data) {
- return nil;
- }
- return [FPIPlatformImageData makeWithData:[FlutterStandardTypedData typedDataWithBytes:data]
- scale:@(image.scale)];
-}
-
-- (nullable NSString *)resolveURLForResource:(nonnull NSString *)name
- withExtension:(nullable NSString *)extension
- error:(FlutterError *_Nullable __autoreleasing *_Nonnull)
- error {
- NSURL *url = [[NSBundle mainBundle] URLForResource:name withExtension:extension];
- return url.absoluteString;
-}
-
-@end
diff --git a/packages/ios_platform_images/ios/Classes/IosPlatformImagesPlugin.swift b/packages/ios_platform_images/ios/Classes/IosPlatformImagesPlugin.swift
new file mode 100644
index 0000000..a47f067
--- /dev/null
+++ b/packages/ios_platform_images/ios/Classes/IosPlatformImagesPlugin.swift
@@ -0,0 +1,38 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import Flutter
+import Foundation
+
+public final class IosPlatformImagesPlugin: NSObject, FlutterPlugin, PlatformImagesApi {
+ public static func register(with registrar: FlutterPluginRegistrar) {
+ let instance = IosPlatformImagesPlugin()
+ let messenger = registrar.messenger()
+ PlatformImagesApiSetup.setUp(binaryMessenger: messenger, api: instance)
+ }
+
+ func loadImage(name: String) -> PlatformImageData? {
+ guard let image = UIImage(named: name),
+ let data = image.pngData()
+ else {
+ return nil
+ }
+
+ return PlatformImageData(
+ data: FlutterStandardTypedData(bytes: data), scale: Double(image.scale))
+ }
+
+ func resolveUrl(resourceName: String, extension: String?) throws -> String? {
+ guard
+ let url = Bundle.main.url(
+ forResource: resourceName,
+ withExtension: `extension`)
+ else {
+ return nil
+ }
+
+ return url.absoluteString
+ }
+
+}
diff --git a/packages/ios_platform_images/ios/Classes/UIImage+ios_platform_images.h b/packages/ios_platform_images/ios/Classes/UIImage+ios_platform_images.h
deleted file mode 100644
index 356a5f1..0000000
--- a/packages/ios_platform_images/ios/Classes/UIImage+ios_platform_images.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import <UIKit/UIKit.h>
-
-@interface UIImage (ios_platform_images)
-
-/// Loads a UIImage from the embedded Flutter project's assets.
-///
-/// This method loads the Flutter asset that is appropriate for the current
-/// screen. If you are on a 2x retina device where usually `UIImage` would be
-/// loading `@2x` assets, it will attempt to load the `2.0x` variant. It will
-/// load the standard image if it can't find the `2.0x` variant.
-///
-/// For example, if your Flutter project's `pubspec.yaml` lists "assets/foo.png"
-/// and "assets/2.0x/foo.png", calling
-/// `[UIImage flutterImageWithName:@"assets/foo.png"]` will load
-/// "assets/2.0x/foo.png".
-///
-/// See also https://flutter.dev/docs/development/ui/assets-and-images
-///
-/// Note: We don't yet support images from package dependencies (ex.
-/// `AssetImage('icons/heart.png', package: 'my_icons')`).
-+ (UIImage *)flutterImageWithName:(NSString *)name;
-
-@end
diff --git a/packages/ios_platform_images/ios/Classes/UIImage+ios_platform_images.m b/packages/ios_platform_images/ios/Classes/UIImage+ios_platform_images.m
deleted file mode 100644
index f20bbcd..0000000
--- a/packages/ios_platform_images/ios/Classes/UIImage+ios_platform_images.m
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#import <Flutter/Flutter.h>
-#import "UIImage+ios_platform_images.h"
-
-@implementation UIImage (ios_platform_images)
-+ (UIImage *)flutterImageWithName:(NSString *)name {
- NSString *filename = [name lastPathComponent];
- NSString *path = [name stringByDeletingLastPathComponent];
- for (int screenScale = [UIScreen mainScreen].scale; screenScale > 1; --screenScale) {
- NSString *key = [FlutterDartProject
- lookupKeyForAsset:[NSString stringWithFormat:@"%@/%d.0x/%@", path, screenScale, filename]];
- UIImage *image = [UIImage imageNamed:key
- inBundle:[NSBundle mainBundle]
- compatibleWithTraitCollection:nil];
- if (image) {
- return image;
- }
- }
- NSString *key = [FlutterDartProject lookupKeyForAsset:name];
- return [UIImage imageNamed:key inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil];
-}
-@end
diff --git a/packages/ios_platform_images/ios/Classes/UIImageIosPlatformImages.swift b/packages/ios_platform_images/ios/Classes/UIImageIosPlatformImages.swift
new file mode 100644
index 0000000..2e9cdef
--- /dev/null
+++ b/packages/ios_platform_images/ios/Classes/UIImageIosPlatformImages.swift
@@ -0,0 +1,41 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import Flutter
+import Foundation
+import UIKit
+
+@objc extension UIImage {
+ /// Loads a UIImage from the embedded Flutter project's assets.
+ ///
+ /// This method loads the Flutter asset that is appropriate for the current
+ /// screen. If you are on a 2x retina device where usually `UIImage` would be
+ /// loading `@2x` assets, it will attempt to load the `2.0x` variant. It will
+ /// load the standard image if it can't find the `2.0x` variant.
+ ///
+ /// For example, if your Flutter project's `pubspec.yaml` lists "assets/foo.png"
+ /// and "assets/2.0x/foo.png", calling
+ /// `[UIImage flutterImageWithName:@"assets/foo.png"]` will load
+ /// "assets/2.0x/foo.png".
+ ///
+ /// See also https://flutter.dev/docs/development/ui/assets-and-images
+ ///
+ /// Note: We don't yet support images from package dependencies (ex.
+ /// `AssetImage('icons/heart.png', package: 'my_icons')`).
+ public static func flutterImageWithName(_ name: String) -> UIImage? {
+ let filename = (name as NSString).lastPathComponent
+ let path = (name as NSString).deletingLastPathComponent
+
+ for screenScale in stride(from: Int(UIScreen.main.scale), to: 1, by: -1) {
+ // TODO(hellohuanlin): Fix duplicate slashes in this path construction.
+ let key = FlutterDartProject.lookupKey(forAsset: "\(path)/\(screenScale).0x/\(filename)")
+ if let image = UIImage(named: key, in: Bundle.main, compatibleWith: nil) {
+ return image
+ }
+ }
+
+ let key = FlutterDartProject.lookupKey(forAsset: name)
+ return UIImage(named: key, in: Bundle.main, compatibleWith: nil)
+ }
+}
diff --git a/packages/ios_platform_images/ios/Classes/messages.g.h b/packages/ios_platform_images/ios/Classes/messages.g.h
deleted file mode 100644
index f4235cf..0000000
--- a/packages/ios_platform_images/ios/Classes/messages.g.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-// Autogenerated from Pigeon (v11.0.1), do not edit directly.
-// See also: https://pub.dev/packages/pigeon
-
-#import <Foundation/Foundation.h>
-
-@protocol FlutterBinaryMessenger;
-@protocol FlutterMessageCodec;
-@class FlutterError;
-@class FlutterStandardTypedData;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class FPIPlatformImageData;
-
-/// A serialization of a platform image's data.
-@interface FPIPlatformImageData : NSObject
-/// `init` unavailable to enforce nonnull fields, see the `make` class method.
-- (instancetype)init NS_UNAVAILABLE;
-+ (instancetype)makeWithData:(FlutterStandardTypedData *)data scale:(NSNumber *)scale;
-/// The image data.
-@property(nonatomic, strong) FlutterStandardTypedData *data;
-/// The image's scale factor.
-@property(nonatomic, strong) NSNumber *scale;
-@end
-
-/// The codec used by FPIPlatformImagesApi.
-NSObject<FlutterMessageCodec> *FPIPlatformImagesApiGetCodec(void);
-
-@protocol FPIPlatformImagesApi
-/// Returns the URL for the given resource, or null if no such resource is
-/// found.
-- (nullable NSString *)resolveURLForResource:(NSString *)resourceName
- withExtension:(nullable NSString *)extension
- error:(FlutterError *_Nullable *_Nonnull)error;
-/// Returns the data for the image resource with the given name, or null if
-/// no such resource is found.
-- (nullable FPIPlatformImageData *)loadImageWithName:(NSString *)name
- error:(FlutterError *_Nullable *_Nonnull)error;
-@end
-
-extern void FPIPlatformImagesApiSetup(id<FlutterBinaryMessenger> binaryMessenger,
- NSObject<FPIPlatformImagesApi> *_Nullable api);
-
-NS_ASSUME_NONNULL_END
diff --git a/packages/ios_platform_images/ios/Classes/messages.g.m b/packages/ios_platform_images/ios/Classes/messages.g.m
deleted file mode 100644
index b96e65e..0000000
--- a/packages/ios_platform_images/ios/Classes/messages.g.m
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-// Autogenerated from Pigeon (v11.0.1), do not edit directly.
-// See also: https://pub.dev/packages/pigeon
-
-#import "messages.g.h"
-
-#if TARGET_OS_OSX
-#import <FlutterMacOS/FlutterMacOS.h>
-#else
-#import <Flutter/Flutter.h>
-#endif
-
-#if !__has_feature(objc_arc)
-#error File requires ARC to be enabled.
-#endif
-
-static NSArray *wrapResult(id result, FlutterError *error) {
- if (error) {
- return @[
- error.code ?: [NSNull null], error.message ?: [NSNull null], error.details ?: [NSNull null]
- ];
- }
- return @[ result ?: [NSNull null] ];
-}
-static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) {
- id result = array[key];
- return (result == [NSNull null]) ? nil : result;
-}
-
-@interface FPIPlatformImageData ()
-+ (FPIPlatformImageData *)fromList:(NSArray *)list;
-+ (nullable FPIPlatformImageData *)nullableFromList:(NSArray *)list;
-- (NSArray *)toList;
-@end
-
-@implementation FPIPlatformImageData
-+ (instancetype)makeWithData:(FlutterStandardTypedData *)data scale:(NSNumber *)scale {
- FPIPlatformImageData *pigeonResult = [[FPIPlatformImageData alloc] init];
- pigeonResult.data = data;
- pigeonResult.scale = scale;
- return pigeonResult;
-}
-+ (FPIPlatformImageData *)fromList:(NSArray *)list {
- FPIPlatformImageData *pigeonResult = [[FPIPlatformImageData alloc] init];
- pigeonResult.data = GetNullableObjectAtIndex(list, 0);
- NSAssert(pigeonResult.data != nil, @"");
- pigeonResult.scale = GetNullableObjectAtIndex(list, 1);
- NSAssert(pigeonResult.scale != nil, @"");
- return pigeonResult;
-}
-+ (nullable FPIPlatformImageData *)nullableFromList:(NSArray *)list {
- return (list) ? [FPIPlatformImageData fromList:list] : nil;
-}
-- (NSArray *)toList {
- return @[
- (self.data ?: [NSNull null]),
- (self.scale ?: [NSNull null]),
- ];
-}
-@end
-
-@interface FPIPlatformImagesApiCodecReader : FlutterStandardReader
-@end
-@implementation FPIPlatformImagesApiCodecReader
-- (nullable id)readValueOfType:(UInt8)type {
- switch (type) {
- case 128:
- return [FPIPlatformImageData fromList:[self readValue]];
- default:
- return [super readValueOfType:type];
- }
-}
-@end
-
-@interface FPIPlatformImagesApiCodecWriter : FlutterStandardWriter
-@end
-@implementation FPIPlatformImagesApiCodecWriter
-- (void)writeValue:(id)value {
- if ([value isKindOfClass:[FPIPlatformImageData class]]) {
- [self writeByte:128];
- [self writeValue:[value toList]];
- } else {
- [super writeValue:value];
- }
-}
-@end
-
-@interface FPIPlatformImagesApiCodecReaderWriter : FlutterStandardReaderWriter
-@end
-@implementation FPIPlatformImagesApiCodecReaderWriter
-- (FlutterStandardWriter *)writerWithData:(NSMutableData *)data {
- return [[FPIPlatformImagesApiCodecWriter alloc] initWithData:data];
-}
-- (FlutterStandardReader *)readerWithData:(NSData *)data {
- return [[FPIPlatformImagesApiCodecReader alloc] initWithData:data];
-}
-@end
-
-NSObject<FlutterMessageCodec> *FPIPlatformImagesApiGetCodec(void) {
- static FlutterStandardMessageCodec *sSharedObject = nil;
- static dispatch_once_t sPred = 0;
- dispatch_once(&sPred, ^{
- FPIPlatformImagesApiCodecReaderWriter *readerWriter =
- [[FPIPlatformImagesApiCodecReaderWriter alloc] init];
- sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter];
- });
- return sSharedObject;
-}
-
-void FPIPlatformImagesApiSetup(id<FlutterBinaryMessenger> binaryMessenger,
- NSObject<FPIPlatformImagesApi> *api) {
- /// Returns the URL for the given resource, or null if no such resource is
- /// found.
- {
- FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
- initWithName:@"dev.flutter.pigeon.ios_platform_images.PlatformImagesApi.resolveUrl"
- binaryMessenger:binaryMessenger
- codec:FPIPlatformImagesApiGetCodec()];
- if (api) {
- NSCAssert([api respondsToSelector:@selector(resolveURLForResource:withExtension:error:)],
- @"FPIPlatformImagesApi api (%@) doesn't respond to "
- @"@selector(resolveURLForResource:withExtension:error:)",
- api);
- [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
- NSArray *args = message;
- NSString *arg_resourceName = GetNullableObjectAtIndex(args, 0);
- NSString *arg_extension = GetNullableObjectAtIndex(args, 1);
- FlutterError *error;
- NSString *output = [api resolveURLForResource:arg_resourceName
- withExtension:arg_extension
- error:&error];
- callback(wrapResult(output, error));
- }];
- } else {
- [channel setMessageHandler:nil];
- }
- }
- /// Returns the data for the image resource with the given name, or null if
- /// no such resource is found.
- {
- FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
- initWithName:@"dev.flutter.pigeon.ios_platform_images.PlatformImagesApi.loadImage"
- binaryMessenger:binaryMessenger
- codec:FPIPlatformImagesApiGetCodec()];
- if (api) {
- NSCAssert(
- [api respondsToSelector:@selector(loadImageWithName:error:)],
- @"FPIPlatformImagesApi api (%@) doesn't respond to @selector(loadImageWithName:error:)",
- api);
- [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
- NSArray *args = message;
- NSString *arg_name = GetNullableObjectAtIndex(args, 0);
- FlutterError *error;
- FPIPlatformImageData *output = [api loadImageWithName:arg_name error:&error];
- callback(wrapResult(output, error));
- }];
- } else {
- [channel setMessageHandler:nil];
- }
- }
-}
diff --git a/packages/ios_platform_images/ios/Classes/messages.g.swift b/packages/ios_platform_images/ios/Classes/messages.g.swift
new file mode 100644
index 0000000..30e14c7
--- /dev/null
+++ b/packages/ios_platform_images/ios/Classes/messages.g.swift
@@ -0,0 +1,162 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+// Autogenerated from Pigeon (v11.0.1), do not edit directly.
+// See also: https://pub.dev/packages/pigeon
+
+import Foundation
+
+#if os(iOS)
+ import Flutter
+#elseif os(macOS)
+ import FlutterMacOS
+#else
+ #error("Unsupported platform.")
+#endif
+
+private func isNullish(_ value: Any?) -> Bool {
+ return value is NSNull || value == nil
+}
+
+private func wrapResult(_ result: Any?) -> [Any?] {
+ return [result]
+}
+
+private func wrapError(_ error: Any) -> [Any?] {
+ if let flutterError = error as? FlutterError {
+ return [
+ flutterError.code,
+ flutterError.message,
+ flutterError.details,
+ ]
+ }
+ return [
+ "\(error)",
+ "\(type(of: error))",
+ "Stacktrace: \(Thread.callStackSymbols)",
+ ]
+}
+
+private func nilOrValue<T>(_ value: Any?) -> T? {
+ if value is NSNull { return nil }
+ return value as! T?
+}
+
+/// A serialization of a platform image's data.
+///
+/// Generated class from Pigeon that represents data sent in messages.
+struct PlatformImageData {
+ /// The image data.
+ var data: FlutterStandardTypedData
+ /// The image's scale factor.
+ var scale: Double
+
+ static func fromList(_ list: [Any?]) -> PlatformImageData? {
+ let data = list[0] as! FlutterStandardTypedData
+ let scale = list[1] as! Double
+
+ return PlatformImageData(
+ data: data,
+ scale: scale
+ )
+ }
+ func toList() -> [Any?] {
+ return [
+ data,
+ scale,
+ ]
+ }
+}
+private class PlatformImagesApiCodecReader: FlutterStandardReader {
+ override func readValue(ofType type: UInt8) -> Any? {
+ switch type {
+ case 128:
+ return PlatformImageData.fromList(self.readValue() as! [Any?])
+ default:
+ return super.readValue(ofType: type)
+ }
+ }
+}
+
+private class PlatformImagesApiCodecWriter: FlutterStandardWriter {
+ override func writeValue(_ value: Any) {
+ if let value = value as? PlatformImageData {
+ super.writeByte(128)
+ super.writeValue(value.toList())
+ } else {
+ super.writeValue(value)
+ }
+ }
+}
+
+private class PlatformImagesApiCodecReaderWriter: FlutterStandardReaderWriter {
+ override func reader(with data: Data) -> FlutterStandardReader {
+ return PlatformImagesApiCodecReader(data: data)
+ }
+
+ override func writer(with data: NSMutableData) -> FlutterStandardWriter {
+ return PlatformImagesApiCodecWriter(data: data)
+ }
+}
+
+class PlatformImagesApiCodec: FlutterStandardMessageCodec {
+ static let shared = PlatformImagesApiCodec(readerWriter: PlatformImagesApiCodecReaderWriter())
+}
+
+/// Generated protocol from Pigeon that represents a handler of messages from Flutter.
+protocol PlatformImagesApi {
+ /// Returns the URL for the given resource, or null if no such resource is
+ /// found.
+ func resolveUrl(resourceName: String, extension: String?) throws -> String?
+ /// Returns the data for the image resource with the given name, or null if
+ /// no such resource is found.
+ func loadImage(name: String) throws -> PlatformImageData?
+}
+
+/// Generated setup class from Pigeon to handle messages through the `binaryMessenger`.
+class PlatformImagesApiSetup {
+ /// The codec used by PlatformImagesApi.
+ static var codec: FlutterStandardMessageCodec { PlatformImagesApiCodec.shared }
+ /// Sets up an instance of `PlatformImagesApi` to handle messages through the `binaryMessenger`.
+ static func setUp(binaryMessenger: FlutterBinaryMessenger, api: PlatformImagesApi?) {
+ /// Returns the URL for the given resource, or null if no such resource is
+ /// found.
+ let resolveUrlChannel = FlutterBasicMessageChannel(
+ name: "dev.flutter.pigeon.ios_platform_images.PlatformImagesApi.resolveUrl",
+ binaryMessenger: binaryMessenger, codec: codec)
+ if let api = api {
+ resolveUrlChannel.setMessageHandler { message, reply in
+ let args = message as! [Any?]
+ let resourceNameArg = args[0] as! String
+ let extensionArg: String? = nilOrValue(args[1])
+ do {
+ let result = try api.resolveUrl(resourceName: resourceNameArg, extension: extensionArg)
+ reply(wrapResult(result))
+ } catch {
+ reply(wrapError(error))
+ }
+ }
+ } else {
+ resolveUrlChannel.setMessageHandler(nil)
+ }
+ /// Returns the data for the image resource with the given name, or null if
+ /// no such resource is found.
+ let loadImageChannel = FlutterBasicMessageChannel(
+ name: "dev.flutter.pigeon.ios_platform_images.PlatformImagesApi.loadImage",
+ binaryMessenger: binaryMessenger, codec: codec)
+ if let api = api {
+ loadImageChannel.setMessageHandler { message, reply in
+ let args = message as! [Any?]
+ let nameArg = args[0] as! String
+ do {
+ let result = try api.loadImage(name: nameArg)
+ reply(wrapResult(result))
+ } catch {
+ reply(wrapError(error))
+ }
+ }
+ } else {
+ loadImageChannel.setMessageHandler(nil)
+ }
+ }
+}
diff --git a/packages/ios_platform_images/ios/ios_platform_images.podspec b/packages/ios_platform_images/ios/ios_platform_images.podspec
index 6b67de3..d042821 100644
--- a/packages/ios_platform_images/ios/ios_platform_images.podspec
+++ b/packages/ios_platform_images/ios/ios_platform_images.podspec
@@ -15,11 +15,14 @@
s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' }
s.source = { :http => 'https://github.com/flutter/packages/tree/main/packages/ios_platform_images' }
s.documentation_url = 'https://pub.dev/packages/ios_platform_images'
- s.source_files = 'Classes/**/*'
+ s.source_files = 'Classes/**/*.swift'
s.dependency 'Flutter'
s.platform = :ios, '11.0'
- # Flutter.framework does not contain a i386 slice. Only x86_64 simulators are supported.
- s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
+ s.xcconfig = {
+ 'DEFINES_MODULE' => 'YES',
+ 'LIBRARY_SEARCH_PATHS' => '$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)/ $(SDKROOT)/usr/lib/swift',
+ 'LD_RUNPATH_SEARCH_PATHS' => '/usr/lib/swift',
+ }
s.swift_version = '5.0'
end
diff --git a/packages/ios_platform_images/lib/ios_platform_images.dart b/packages/ios_platform_images/lib/ios_platform_images.dart
index 22e0b84..70894f8 100644
--- a/packages/ios_platform_images/lib/ios_platform_images.dart
+++ b/packages/ios_platform_images/lib/ios_platform_images.dart
@@ -137,7 +137,7 @@
imageData.then((PlatformImageData? image) {
if (image == null) {
scaleCompleter.completeError(
- Exception("Image couldn't be found: $name"),
+ Exception("Scale couldn't be found to load image: $name"),
);
bytesCompleter.completeError(
Exception("Image couldn't be found: $name"),
diff --git a/packages/ios_platform_images/pigeons/messages.dart b/packages/ios_platform_images/pigeons/messages.dart
index d0a8d34..36cd993 100644
--- a/packages/ios_platform_images/pigeons/messages.dart
+++ b/packages/ios_platform_images/pigeons/messages.dart
@@ -6,9 +6,7 @@
@ConfigurePigeon(PigeonOptions(
dartOut: 'lib/src/messages.g.dart',
- objcOptions: ObjcOptions(prefix: 'FPI'),
- objcHeaderOut: 'ios/Classes/messages.g.h',
- objcSourceOut: 'ios/Classes/messages.g.m',
+ swiftOut: 'ios/Classes/messages.g.swift',
copyrightHeader: 'pigeons/copyright.txt',
))
@@ -27,11 +25,9 @@
abstract class PlatformImagesApi {
/// Returns the URL for the given resource, or null if no such resource is
/// found.
- @ObjCSelector('resolveURLForResource:withExtension:')
String? resolveUrl(String resourceName, String? extension);
/// Returns the data for the image resource with the given name, or null if
/// no such resource is found.
- @ObjCSelector('loadImageWithName:')
PlatformImageData? loadImage(String name);
}
diff --git a/packages/ios_platform_images/pubspec.yaml b/packages/ios_platform_images/pubspec.yaml
index c4a0eee..ac6d7bd 100644
--- a/packages/ios_platform_images/pubspec.yaml
+++ b/packages/ios_platform_images/pubspec.yaml
@@ -2,7 +2,7 @@
description: A plugin to share images between Flutter and iOS in add-to-app setups.
repository: https://github.com/flutter/packages/tree/main/packages/ios_platform_images
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+ios_platform_images%22
-version: 0.2.2+3
+version: 0.2.3
environment:
sdk: ">=2.19.0 <4.0.0"