diff --git a/packages/image_picker/CHANGELOG.md b/packages/image_picker/CHANGELOG.md index e6cbc13a621f..6a8a75a4b65f 100644 --- a/packages/image_picker/CHANGELOG.md +++ b/packages/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.1+6 + +* Define clang module for iOS + ## 0.6.1+5 * Update and migrate iOS example project. diff --git a/packages/image_picker/example/ios/Runner.xcodeproj/project.pbxproj b/packages/image_picker/example/ios/Runner.xcodeproj/project.pbxproj index 0780599c7be2..4ebf1def19ca 100644 --- a/packages/image_picker/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/image_picker/example/ios/Runner.xcodeproj/project.pbxproj @@ -26,6 +26,7 @@ 9FC8F0EC229FA68500C8D58F /* gifImage.gif in Resources */ = {isa = PBXBuildFile; fileRef = 9FC8F0E8229FA49E00C8D58F /* gifImage.gif */; }; 9FC8F0EE229FB90B00C8D58F /* ImageUtilTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FC8F0ED229FB90B00C8D58F /* ImageUtilTests.m */; }; F4F7A436CCA4BF276270A3AE /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EC32F6993F4529982D9519F1 /* libPods-Runner.a */; }; + F78AF3192342D9D7008449C7 /* ImagePickerTestImages.m in Sources */ = {isa = PBXBuildFile; fileRef = F78AF3182342D9D7008449C7 /* ImagePickerTestImages.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -61,11 +62,11 @@ 5C9513001EC38BD300040975 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 680049172280D368006DD6AB /* image_picker_exampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = image_picker_exampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 6800491B2280D368006DD6AB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 680049252280D736006DD6AB /* MetaDataUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MetaDataUtilTests.m; sourceTree = ""; }; + 680049252280D736006DD6AB /* MetaDataUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MetaDataUtilTests.m; path = ../../../ios/Tests/MetaDataUtilTests.m; sourceTree = ""; }; 680049352280F2B8006DD6AB /* pngImage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pngImage.png; sourceTree = ""; }; 680049362280F2B8006DD6AB /* jpgImage.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = jpgImage.jpg; sourceTree = ""; }; 6801632E632668F4349764C9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 68F4B463228B3AB500C25614 /* PhotoAssetUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PhotoAssetUtilTests.m; sourceTree = ""; }; + 68F4B463228B3AB500C25614 /* PhotoAssetUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = PhotoAssetUtilTests.m; path = ../../../ios/Tests/PhotoAssetUtilTests.m; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; @@ -79,8 +80,10 @@ 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9FC8F0E8229FA49E00C8D58F /* gifImage.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = gifImage.gif; sourceTree = ""; }; - 9FC8F0ED229FB90B00C8D58F /* ImageUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImageUtilTests.m; sourceTree = ""; }; + 9FC8F0ED229FB90B00C8D58F /* ImageUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ImageUtilTests.m; path = ../../../ios/Tests/ImageUtilTests.m; sourceTree = ""; }; EC32F6993F4529982D9519F1 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + F78AF3172342D9D7008449C7 /* ImagePickerTestImages.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ImagePickerTestImages.h; path = ../../../ios/Tests/ImagePickerTestImages.h; sourceTree = ""; }; + F78AF3182342D9D7008449C7 /* ImagePickerTestImages.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ImagePickerTestImages.m; path = ../../../ios/Tests/ImagePickerTestImages.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -111,6 +114,8 @@ 9FC8F0ED229FB90B00C8D58F /* ImageUtilTests.m */, 680049252280D736006DD6AB /* MetaDataUtilTests.m */, 68F4B463228B3AB500C25614 /* PhotoAssetUtilTests.m */, + F78AF3172342D9D7008449C7 /* ImagePickerTestImages.h */, + F78AF3182342D9D7008449C7 /* ImagePickerTestImages.m */, ); path = image_picker_exampleTests; sourceTree = ""; @@ -383,6 +388,7 @@ buildActionMask = 2147483647; files = ( 9FC8F0EE229FB90B00C8D58F /* ImageUtilTests.m in Sources */, + F78AF3192342D9D7008449C7 /* ImagePickerTestImages.m in Sources */, 680049262280D736006DD6AB /* MetaDataUtilTests.m in Sources */, 68F4B464228B3AB500C25614 /* PhotoAssetUtilTests.m in Sources */, ); @@ -433,7 +439,6 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_COMMA = YES; @@ -445,17 +450,12 @@ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = image_picker_exampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.2; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.google.transformTest.image-picker-exampleTests"; PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner"; }; name = Debug; @@ -465,7 +465,6 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_COMMA = YES; @@ -477,16 +476,11 @@ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = image_picker_exampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.2; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.google.transformTest.image-picker-exampleTests"; PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner"; }; name = Release; @@ -604,7 +598,6 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -626,7 +619,6 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", diff --git a/packages/image_picker/ios/Classes/FLTImagePickerImageUtil.m b/packages/image_picker/ios/Classes/FLTImagePickerImageUtil.m index 000bd4bf9c66..241db72a68cf 100644 --- a/packages/image_picker/ios/Classes/FLTImagePickerImageUtil.m +++ b/packages/image_picker/ios/Classes/FLTImagePickerImageUtil.m @@ -107,7 +107,7 @@ + (GIFInfo *)scaledGIFImage:(NSData *)data NSDictionary *gifProperties = properties[(NSString *)kCGImagePropertyGIFDictionary]; NSNumber *delay = gifProperties[(NSString *)kCGImagePropertyGIFUnclampedDelayTime]; - if (!delay) { + if (delay == nil) { delay = gifProperties[(NSString *)kCGImagePropertyGIFDelayTime]; } diff --git a/packages/image_picker/ios/Classes/FLTImagePickerMetaDataUtil.h b/packages/image_picker/ios/Classes/FLTImagePickerMetaDataUtil.h index a82dbbff93f7..9f7c19aae1b4 100644 --- a/packages/image_picker/ios/Classes/FLTImagePickerMetaDataUtil.h +++ b/packages/image_picker/ios/Classes/FLTImagePickerMetaDataUtil.h @@ -23,7 +23,7 @@ extern const FLTImagePickerMIMEType kFLTImagePickerMIMETypeDefault; + (FLTImagePickerMIMEType)getImageMIMETypeFromImageData:(NSData *)imageData; // Get corresponding surfix from type. -+ (NSString *)imageTypeSuffixFromType:(FLTImagePickerMIMEType)type; ++ (nullable NSString *)imageTypeSuffixFromType:(FLTImagePickerMIMEType)type; + (NSDictionary *)getMetaDataFromImageData:(NSData *)imageData; diff --git a/packages/image_picker/ios/Classes/FLTImagePickerMetaDataUtil.m b/packages/image_picker/ios/Classes/FLTImagePickerMetaDataUtil.m index c15f7079ad0c..67b6efa8a8a8 100644 --- a/packages/image_picker/ios/Classes/FLTImagePickerMetaDataUtil.m +++ b/packages/image_picker/ios/Classes/FLTImagePickerMetaDataUtil.m @@ -71,14 +71,14 @@ + (NSData *)convertImage:(UIImage *)image switch (type) { case FLTImagePickerMIMETypeJPEG: { - CGFloat qualityFloat = quality ? quality.floatValue : 1; + CGFloat qualityFloat = (quality != nil) ? quality.floatValue : 1; return UIImageJPEGRepresentation(image, qualityFloat); } case FLTImagePickerMIMETypePNG: return UIImagePNGRepresentation(image); default: { // converts to JPEG by default. - CGFloat qualityFloat = quality ? quality.floatValue : 1; + CGFloat qualityFloat = (quality != nil) ? quality.floatValue : 1; return UIImageJPEGRepresentation(image, qualityFloat); } } diff --git a/packages/image_picker/ios/Tests/ImagePickerTestImages.h b/packages/image_picker/ios/Tests/ImagePickerTestImages.h new file mode 100644 index 000000000000..7173e1c455ba --- /dev/null +++ b/packages/image_picker/ios/Tests/ImagePickerTestImages.h @@ -0,0 +1,17 @@ +// Copyright 2019 The Chromium 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 Foundation; + +NS_ASSUME_NONNULL_BEGIN + +@interface ImagePickerTestImages : NSObject + +@property(class, copy, readonly) NSData *JPGTestData; +@property(class, copy, readonly) NSData *PNGTestData; +@property(class, copy, readonly) NSData *GIFTestData; + +@end + +NS_ASSUME_NONNULL_END diff --git a/packages/image_picker/ios/Tests/ImagePickerTestImages.m b/packages/image_picker/ios/Tests/ImagePickerTestImages.m new file mode 100644 index 000000000000..53559f0b637b --- /dev/null +++ b/packages/image_picker/ios/Tests/ImagePickerTestImages.m @@ -0,0 +1,122 @@ +// Copyright 2019 The Chromium 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 "ImagePickerTestImages.h" + +@implementation ImagePickerTestImages + ++ (NSData*)JPGTestData { + NSBundle* bundle = [NSBundle bundleForClass:self]; + NSURL* url = [bundle URLForResource:@"jpgImage" withExtension:@"jpg"]; + NSData* data = [NSData dataWithContentsOfURL:url]; + if (!data.length) { + // When the tests are run outside the example project (podspec lint) the image may not be + // embedded in the test bundle. Fall back to the base64 string representation of the jpg. + data = [[NSData alloc] + initWithBase64EncodedString: + @"/9j/4AAQSkZJRgABAQAALgAuAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABA" + "AAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAAAuAAAAAQAAAC4AAAABAAOg" + "AQADAAAAAQABAACgAgAEAAAAAQAAAAygAwAEAAAAAQAAAAcAAAAA/+EJc2h0dHA6Ly9ucy5hZG9iZS5jb20" + "veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz" + "4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiP" + "iA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucy" + "MiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZ" + "G9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHBob3Rvc2hvcDpDcmVkaXQ9IsKpIEdvb2dsZSIvPiA8L3JkZjpSR" + "EY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI" + "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9In" + "ciPz4A/+0AVlBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAdHAFaAAMbJUccAgAAAgACHAJuAAnCqSBHb29nbG" + "UAOEJJTQQlAAAAAAAQmkt2IF3PgNJVMGnV2zijEf/AABEIAAcADAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQA" + "AAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQ" + "gjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h" + "5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp" + "6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAAB" + "AncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0R" + "FRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tr" + "e4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2wBDAAQDAwMDAgQDAwMEBAQFBgoGBg" + "UFBgwICQcKDgwPDg4MDQ0PERYTDxAVEQ0NExoTFRcYGRkZDxIbHRsYHRYYGRj/2wBDAQQEBAYFBgsGBgsYEA0" + "QGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBj/3QAEAAH/2gAMAwEA" + "AhEDEQA/AMWiiivzk/qo/9k=" + options:0]; + } + return data; +} + ++ (NSData*)PNGTestData { + NSBundle* bundle = [NSBundle bundleForClass:self]; + NSURL* url = [bundle URLForResource:@"pngImage" withExtension:@"png"]; + NSData* data = [NSData dataWithContentsOfURL:url]; + if (!data.length) { + // When the tests are run outside the example project (podspec lint) the image may not be + // embedded in the test bundle. Fall back to the base64 string representation of the png. + data = [[NSData alloc] + initWithBase64EncodedString: + @"iVBORw0KGgoAAAAEQ2dCSVAAIAYsuHdmAAAADUlIRFIAAAAMAAAABwgGAAAAPLKsJAAAAARnQU1BAACxjwv8Y" + "QUAAAABc1JHQgCuzhzpAAAAIGNIUk0AAHomAACAhAAA+" + "gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAJcEh" + "ZcwAABxMAAAcTAc4gDwgAAAAOSURBVGMwdX71nxTMMKqBCAwAsfuEYQAAAABJRU5ErkJggg==" + options:0]; + } + return data; +} + ++ (NSData*)GIFTestData { + NSBundle* bundle = [NSBundle bundleForClass:self]; + NSURL* url = [bundle URLForResource:@"gifImage" withExtension:@"gif"]; + NSData* data = [NSData dataWithContentsOfURL:url]; + if (!data.length) { + // When the tests are run outside the example project (podspec lint) the image may not be + // embedded in the test bundle. Fall back to the base64 string representation of the gif. + data = [[NSData alloc] + initWithBase64EncodedString: + @"R0lGODlhDAAHAPAAAOpCNQAAACH5BABkAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAADAAHAAACCISP" + "qcvtD1UBACH5BABkAAAALAAAAAAMAAcAhuc/JPA/K+49Ne4+PvA7MrhYHoB+A4N9BYh+BYZ+E4xyG496HZJ" + "8F5J4GaRtE6tsH7tWIr9SK7xVKJl3IKpvI7lrKc1FLc5PLNJILsdTJMFVJsZWJshWIM9XIshWJNBWLd1SK9" + "BUMNFRNOlAI+9CMuNJMetHPnuCAF66F1u8FVu7GV27HGytG3utGH6rHGK1G3WxFWeuIHqlIG60IGi4JTnTDz" + "jZDy/VEy/eFTnVEDzXFxflABfjBRPmBRbnBxPrABvpARntAxLuCBXuCQTyAAb1BgvwACnmDSPpDSLjECPpED" + "HhFFDLGIeAFoiBFoqCF4uCHYWnHJGVJqSNJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdWgAIXCjE3PTtAPDUuByQfCzQ4Qj9BPjktBgAcC" + "StJRURGQzYwJyMdDDM6SkhHS0xRCAEgD1IsKikoLzJTDgQlEBQNT05NUBMVBQMmGCEZHhsaEhEiFoEAIfkEAG" + "QAAAAsAAAAAAwABwCFB+8ACewACu0ACe4ACO8AC+4ACu8ADOwAD+wAEOYAEekAA/EABfAAB/IAAfUAA/UAAP" + "cAAfcAAvYAA/cBBPQABfUABvQAB/UBBvYBCfAACPEAC/AACvIACvMBAPgAAPkAAPgBAPkBAvgBAPoAAPoBA" + "PsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAABkfAAadjeUxEEYnk8QBoLhUHCASJJCWLyiTiIZFG3lAoO4F4SiUwScywYCQQ8" + "ScEEokCG06D8pA4mBUWCQoIBwIGGQQGBgUFQQA7" + options:0]; + } + return data; +} + +@end diff --git a/packages/image_picker/example/ios/image_picker_exampleTests/ImageUtilTests.m b/packages/image_picker/ios/Tests/ImageUtilTests.m similarity index 55% rename from packages/image_picker/example/ios/image_picker_exampleTests/ImageUtilTests.m rename to packages/image_picker/ios/Tests/ImageUtilTests.m index f59c942ea7cb..126795f8bdc9 100644 --- a/packages/image_picker/example/ios/image_picker_exampleTests/ImageUtilTests.m +++ b/packages/image_picker/ios/Tests/ImageUtilTests.m @@ -2,25 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import -#import "FLTImagePickerImageUtil.h" +#import "ImagePickerTestImages.h" -@interface ImageUtilTests : XCTestCase - -@property(strong, nonatomic) NSBundle *testBundle; +@import image_picker; +@import XCTest; +@interface ImageUtilTests : XCTestCase @end @implementation ImageUtilTests -- (void)setUp { - self.testBundle = [NSBundle bundleForClass:self.class]; -} - - (void)testScaledImage_ShouldBeScaled { - NSData *data = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"jpgImage" - ofType:@"jpg"]]; - UIImage *image = [UIImage imageWithData:data]; + UIImage *image = [UIImage imageWithData:ImagePickerTestImages.JPGTestData]; UIImage *newImage = [FLTImagePickerImageUtil scaledImage:image maxWidth:@3 maxHeight:@2]; XCTAssertEqual(newImage.size.width, 3); @@ -29,9 +22,9 @@ - (void)testScaledImage_ShouldBeScaled { - (void)testScaledGIFImage_ShouldBeScaled { // gif image that frame size is 3 and the duration is 1 second. - NSData *data = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"gifImage" - ofType:@"gif"]]; - GIFInfo *info = [FLTImagePickerImageUtil scaledGIFImage:data maxWidth:@3 maxHeight:@2]; + GIFInfo *info = [FLTImagePickerImageUtil scaledGIFImage:ImagePickerTestImages.GIFTestData + maxWidth:@3 + maxHeight:@2]; NSArray *images = info.images; NSTimeInterval duration = info.interval; diff --git a/packages/image_picker/example/ios/image_picker_exampleTests/MetaDataUtilTests.m b/packages/image_picker/ios/Tests/MetaDataUtilTests.m similarity index 55% rename from packages/image_picker/example/ios/image_picker_exampleTests/MetaDataUtilTests.m rename to packages/image_picker/ios/Tests/MetaDataUtilTests.m index e625105d3196..120ba3890a0e 100644 --- a/packages/image_picker/example/ios/image_picker_exampleTests/MetaDataUtilTests.m +++ b/packages/image_picker/ios/Tests/MetaDataUtilTests.m @@ -2,39 +2,31 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import -#import "FLTImagePickerMetaDataUtil.h" +#import "ImagePickerTestImages.h" -@interface MetaDataUtilTests : XCTestCase - -@property(strong, nonatomic) NSBundle *testBundle; +@import image_picker; +@import XCTest; +@interface MetaDataUtilTests : XCTestCase @end @implementation MetaDataUtilTests -- (void)setUp { - self.testBundle = [NSBundle bundleForClass:self.class]; -} - - (void)testGetImageMIMETypeFromImageData { // test jpeg - NSData *dataJPG = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"jpgImage" - ofType:@"jpg"]]; - XCTAssertEqual([FLTImagePickerMetaDataUtil getImageMIMETypeFromImageData:dataJPG], - FLTImagePickerMIMETypeJPEG); + XCTAssertEqual( + [FLTImagePickerMetaDataUtil getImageMIMETypeFromImageData:ImagePickerTestImages.JPGTestData], + FLTImagePickerMIMETypeJPEG); // test png - NSData *dataPNG = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"pngImage" - ofType:@"png"]]; - XCTAssertEqual([FLTImagePickerMetaDataUtil getImageMIMETypeFromImageData:dataPNG], - FLTImagePickerMIMETypePNG); + XCTAssertEqual( + [FLTImagePickerMetaDataUtil getImageMIMETypeFromImageData:ImagePickerTestImages.PNGTestData], + FLTImagePickerMIMETypePNG); // test gif - NSData *dataGIF = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"gifImage" - ofType:@"gif"]]; - XCTAssertEqual([FLTImagePickerMetaDataUtil getImageMIMETypeFromImageData:dataGIF], - FLTImagePickerMIMETypeGIF); + XCTAssertEqual( + [FLTImagePickerMetaDataUtil getImageMIMETypeFromImageData:ImagePickerTestImages.GIFTestData], + FLTImagePickerMIMETypeGIF); } - (void)testSuffixFromType { @@ -55,16 +47,15 @@ - (void)testSuffixFromType { } - (void)testGetMetaData { - NSData *dataJPG = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"jpgImage" - ofType:@"jpg"]]; - NSDictionary *metaData = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:dataJPG]; - NSDictionary *exif = [metaData objectForKey:(NSString *)kCGImagePropertyExifDictionary]; - XCTAssertEqual([exif[(NSString *)kCGImagePropertyExifPixelXDimension] integerValue], 12); + NSDictionary *metaData = + [FLTImagePickerMetaDataUtil getMetaDataFromImageData:ImagePickerTestImages.JPGTestData]; + NSDictionary *exif = [metaData objectForKey:(__bridge NSString *)kCGImagePropertyExifDictionary]; + XCTAssertEqual([exif[(__bridge NSString *)kCGImagePropertyExifPixelXDimension] integerValue], 12); } - (void)testWriteMetaData { - NSData *dataJPG = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"jpgImage" - ofType:@"jpg"]]; + NSData *dataJPG = ImagePickerTestImages.JPGTestData; + NSDictionary *metaData = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:dataJPG]; NSString *tmpFile = [NSString stringWithFormat:@"image_picker_test.jpg"]; NSString *tmpDirectory = NSTemporaryDirectory(); @@ -81,9 +72,7 @@ - (void)testWriteMetaData { } - (void)testConvertImageToData { - NSData *dataJPG = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"jpgImage" - ofType:@"jpg"]]; - UIImage *imageJPG = [UIImage imageWithData:dataJPG]; + UIImage *imageJPG = [UIImage imageWithData:ImagePickerTestImages.JPGTestData]; NSData *convertedDataJPG = [FLTImagePickerMetaDataUtil convertImage:imageJPG usingType:FLTImagePickerMIMETypeJPEG quality:@(0.5)]; diff --git a/packages/image_picker/example/ios/image_picker_exampleTests/PhotoAssetUtilTests.m b/packages/image_picker/ios/Tests/PhotoAssetUtilTests.m similarity index 81% rename from packages/image_picker/example/ios/image_picker_exampleTests/PhotoAssetUtilTests.m rename to packages/image_picker/ios/Tests/PhotoAssetUtilTests.m index 118707564ac4..7491c907724c 100644 --- a/packages/image_picker/example/ios/image_picker_exampleTests/PhotoAssetUtilTests.m +++ b/packages/image_picker/ios/Tests/PhotoAssetUtilTests.m @@ -2,22 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import -#import "FLTImagePickerMetaDataUtil.h" -#import "FLTImagePickerPhotoAssetUtil.h" +#import "ImagePickerTestImages.h" -@interface PhotoAssetUtilTests : XCTestCase - -@property(strong, nonatomic) NSBundle *testBundle; +@import image_picker; +@import XCTest; +@interface PhotoAssetUtilTests : XCTestCase @end @implementation PhotoAssetUtilTests -- (void)setUp { - self.testBundle = [NSBundle bundleForClass:self.class]; -} - - (void)getAssetFromImagePickerInfoShouldReturnNilIfNotAvailable { NSDictionary *mockData = @{}; XCTAssertNil([FLTImagePickerPhotoAssetUtil getAssetFromImagePickerInfo:mockData]); @@ -25,8 +19,7 @@ - (void)getAssetFromImagePickerInfoShouldReturnNilIfNotAvailable { - (void)testSaveImageWithOriginalImageData_ShouldSaveWithTheCorrectExtentionAndMetaData { // test jpg - NSData *dataJPG = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"jpgImage" - ofType:@"jpg"]]; + NSData *dataJPG = ImagePickerTestImages.JPGTestData; UIImage *imageJPG = [UIImage imageWithData:dataJPG]; NSString *savedPathJPG = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:dataJPG image:imageJPG @@ -42,8 +35,7 @@ - (void)testSaveImageWithOriginalImageData_ShouldSaveWithTheCorrectExtentionAndM XCTAssertEqualObjects(originalMetaDataJPG[@"ProfileName"], newMetaDataJPG[@"ProfileName"]); // test png - NSData *dataPNG = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"pngImage" - ofType:@"png"]]; + NSData *dataPNG = ImagePickerTestImages.PNGTestData; UIImage *imagePNG = [UIImage imageWithData:dataPNG]; NSString *savedPathPNG = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:dataPNG image:imagePNG @@ -60,9 +52,7 @@ - (void)testSaveImageWithOriginalImageData_ShouldSaveWithTheCorrectExtentionAndM } - (void)testSaveImageWithPickerInfo_ShouldSaveWithDefaultExtention { - NSData *dataJPG = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"jpgImage" - ofType:@"jpg"]]; - UIImage *imageJPG = [UIImage imageWithData:dataJPG]; + UIImage *imageJPG = [UIImage imageWithData:ImagePickerTestImages.JPGTestData]; NSString *savedPathJPG = [FLTImagePickerPhotoAssetUtil saveImageWithPickerInfo:nil image:imageJPG imageQuality:nil]; @@ -80,9 +70,7 @@ - (void)testSaveImageWithPickerInfo_ShouldSaveWithTheCorrectExtentionAndMetaData @{(__bridge NSString *)kCGImagePropertyExifMakerNote : @"aNote"} } }; - NSData *dataJPG = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"jpgImage" - ofType:@"jpg"]]; - UIImage *imageJPG = [UIImage imageWithData:dataJPG]; + UIImage *imageJPG = [UIImage imageWithData:ImagePickerTestImages.JPGTestData]; NSString *savedPathJPG = [FLTImagePickerPhotoAssetUtil saveImageWithPickerInfo:dummyInfo image:imageJPG imageQuality:nil]; @@ -95,8 +83,7 @@ - (void)testSaveImageWithPickerInfo_ShouldSaveWithTheCorrectExtentionAndMetaData - (void)testSaveImageWithOriginalImageData_ShouldSaveAsGifAnimation { // test gif - NSData *dataGIF = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"gifImage" - ofType:@"gif"]]; + NSData *dataGIF = ImagePickerTestImages.GIFTestData; UIImage *imageGIF = [UIImage imageWithData:dataGIF]; CGImageSourceRef imageSource = CGImageSourceCreateWithData((CFDataRef)dataGIF, nil); @@ -122,8 +109,7 @@ - (void)testSaveImageWithOriginalImageData_ShouldSaveAsGifAnimation { - (void)testSaveImageWithOriginalImageData_ShouldSaveAsScalledGifAnimation { // test gif - NSData *dataGIF = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"gifImage" - ofType:@"gif"]]; + NSData *dataGIF = ImagePickerTestImages.GIFTestData; UIImage *imageGIF = [UIImage imageWithData:dataGIF]; CGImageSourceRef imageSource = CGImageSourceCreateWithData((CFDataRef)dataGIF, nil); diff --git a/packages/image_picker/ios/image_picker.podspec b/packages/image_picker/ios/image_picker.podspec old mode 100755 new mode 100644 index c11cb1cf92a0..3a351a2649f7 --- a/packages/image_picker/ios/image_picker.podspec +++ b/packages/image_picker/ios/image_picker.podspec @@ -14,6 +14,11 @@ Flutter plugin that shows an image picker. s.source = { :path => '.' } s.source_files = 'Classes/**/*' s.public_header_files = 'Classes/**/*.h' - s.ios.deployment_target = '8.0' s.dependency 'Flutter' + s.platform = :ios, '8.0' + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS' => 'armv7 arm64 x86_64' } + + s.test_spec 'Tests' do |test_spec| + test_spec.source_files = 'Tests/**/*' + end end diff --git a/packages/image_picker/pubspec.yaml b/packages/image_picker/pubspec.yaml index ad09895d9445..1779edcad0fc 100755 --- a/packages/image_picker/pubspec.yaml +++ b/packages/image_picker/pubspec.yaml @@ -5,7 +5,7 @@ authors: - Flutter Team - Rhodes Davis Jr. homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker -version: 0.6.1+5 +version: 0.6.1+6 flutter: plugin: diff --git a/script/lint_darwin_plugins.sh b/script/lint_darwin_plugins.sh index 39794882ef4a..30c601191978 100755 --- a/script/lint_darwin_plugins.sh +++ b/script/lint_darwin_plugins.sh @@ -52,7 +52,6 @@ function lint_packages() { 'device_info' 'google_maps_flutter' 'google_sign_in' - 'image_picker' 'instrumentation_adapter' 'local_auth' 'package_info'