Standardize XCTest locations and harnesses (#4005)

- Moves XCTest files to the now-standard location
- Ensures that the harnesses are called RunnerTests for consistency
- Splits the image_picker unit tests out of the UI target into a new unit test target
- Moves existing google_sign_in tests into the harness, since they weren't being run.
  One new test, added since we accidentally stopped compiling the file, was removed
  since it crashed other tests in the suite (which has non-trivial global state, so fixing
  it wasn't feasible here; I've follow up on the PR that added the test).
diff --git a/packages/camera/camera/example/ios/Podfile b/packages/camera/camera/example/ios/Podfile
index 884573b..5bc7b7e 100644
--- a/packages/camera/camera/example/ios/Podfile
+++ b/packages/camera/camera/example/ios/Podfile
@@ -29,8 +29,8 @@
 
 target 'Runner' do
   flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
-  
-  target 'UnitTests' do
+
+  target 'RunnerTests' do
     platform :ios, '9.0'
     inherit! :search_paths
     # Pods for testing
diff --git a/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj b/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj
index d39ed6a..1873cfb 100644
--- a/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/camera/camera/example/ios/Runner.xcodeproj/project.pbxproj
@@ -7,16 +7,16 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		01010359265BEB94FD7CE839 /* libPods-UnitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CCBF0769BA2C53F6AED0F17 /* libPods-UnitTests.a */; };
 		03BB766B2665316900CE5A93 /* CameraFocusTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 03BB766A2665316900CE5A93 /* CameraFocusTests.m */; };
-		03BB767326653ABE00CE5A93 /* CameraPluginTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 03BB767226653ABE00CE5A93 /* CameraPluginTests.m */; };
 		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+		334733EA2668111C00DCC49E /* CameraPluginTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 03BB767226653ABE00CE5A93 /* CameraPluginTests.m */; };
 		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
 		978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
 		97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
 		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 */; };
+		A513685080F868CF2695CE75 /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5555DD51E06E67921CFA83DD /* libPods-RunnerTests.a */; };
 		D065CD815D405ECB22FB1BBA /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A4F2DE74AE0C572296A00BF /* libPods-Runner.a */; };
 /* End PBXBuildFile section */
 
@@ -44,15 +44,16 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
-		03BB76682665316900CE5A93 /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		03BB76682665316900CE5A93 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		03BB766A2665316900CE5A93 /* CameraFocusTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CameraFocusTests.m; sourceTree = "<group>"; };
 		03BB766C2665316900CE5A93 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		03BB767226653ABE00CE5A93 /* CameraPluginTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CameraPluginTests.m; path = ../../../ios/Tests/CameraPluginTests.m; sourceTree = "<group>"; };
+		03BB767226653ABE00CE5A93 /* CameraPluginTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraPluginTests.m; 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>"; };
 		2A4F2DE74AE0C572296A00BF /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.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>"; };
-		6CCBF0769BA2C53F6AED0F17 /* libPods-UnitTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-UnitTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		40D9DDFB3787960D28DF3FB3 /* 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 = "<group>"; };
+		5555DD51E06E67921CFA83DD /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
 		7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
 		7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
@@ -66,8 +67,7 @@
 		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>"; };
 		A4725B4F24805CD3CA67828F /* 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>"; };
-		A903DC9BC9D1CB89BD4FB3CB /* Pods-UnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UnitTests.debug.xcconfig"; path = "Target Support Files/Pods-UnitTests/Pods-UnitTests.debug.xcconfig"; sourceTree = "<group>"; };
-		C2D350ADCDFC81FCB0D6F12C /* Pods-UnitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UnitTests.release.xcconfig"; path = "Target Support Files/Pods-UnitTests/Pods-UnitTests.release.xcconfig"; sourceTree = "<group>"; };
+		D1FF8C34CA9E9BE702C5EC06 /* 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>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -75,7 +75,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				01010359265BEB94FD7CE839 /* libPods-UnitTests.a in Frameworks */,
+				A513685080F868CF2695CE75 /* libPods-RunnerTests.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -90,21 +90,21 @@
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
-		03BB76692665316900CE5A93 /* UnitTests */ = {
+		03BB76692665316900CE5A93 /* RunnerTests */ = {
 			isa = PBXGroup;
 			children = (
 				03BB767226653ABE00CE5A93 /* CameraPluginTests.m */,
 				03BB766A2665316900CE5A93 /* CameraFocusTests.m */,
 				03BB766C2665316900CE5A93 /* Info.plist */,
 			);
-			path = UnitTests;
+			path = RunnerTests;
 			sourceTree = "<group>";
 		};
 		78D1009194BD06C03BED950D /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
 				2A4F2DE74AE0C572296A00BF /* libPods-Runner.a */,
-				6CCBF0769BA2C53F6AED0F17 /* libPods-UnitTests.a */,
+				5555DD51E06E67921CFA83DD /* libPods-RunnerTests.a */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -125,7 +125,7 @@
 			children = (
 				9740EEB11CF90186004384FC /* Flutter */,
 				97C146F01CF9000F007C117D /* Runner */,
-				03BB76692665316900CE5A93 /* UnitTests */,
+				03BB76692665316900CE5A93 /* RunnerTests */,
 				97C146EF1CF9000F007C117D /* Products */,
 				FD386F00E98D73419C929072 /* Pods */,
 				78D1009194BD06C03BED950D /* Frameworks */,
@@ -136,7 +136,7 @@
 			isa = PBXGroup;
 			children = (
 				97C146EE1CF9000F007C117D /* Runner.app */,
-				03BB76682665316900CE5A93 /* UnitTests.xctest */,
+				03BB76682665316900CE5A93 /* RunnerTests.xctest */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -170,8 +170,8 @@
 			children = (
 				8F7D83D0CFC9B51065F87CE1 /* Pods-Runner.debug.xcconfig */,
 				A4725B4F24805CD3CA67828F /* Pods-Runner.release.xcconfig */,
-				A903DC9BC9D1CB89BD4FB3CB /* Pods-UnitTests.debug.xcconfig */,
-				C2D350ADCDFC81FCB0D6F12C /* Pods-UnitTests.release.xcconfig */,
+				40D9DDFB3787960D28DF3FB3 /* Pods-RunnerTests.debug.xcconfig */,
+				D1FF8C34CA9E9BE702C5EC06 /* Pods-RunnerTests.release.xcconfig */,
 			);
 			path = Pods;
 			sourceTree = "<group>";
@@ -179,9 +179,9 @@
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
-		03BB76672665316900CE5A93 /* UnitTests */ = {
+		03BB76672665316900CE5A93 /* RunnerTests */ = {
 			isa = PBXNativeTarget;
-			buildConfigurationList = 03BB76712665316900CE5A93 /* Build configuration list for PBXNativeTarget "UnitTests" */;
+			buildConfigurationList = 03BB76712665316900CE5A93 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
 			buildPhases = (
 				604FC00FF5713F40F2A4441D /* [CP] Check Pods Manifest.lock */,
 				03BB76642665316900CE5A93 /* Sources */,
@@ -193,9 +193,9 @@
 			dependencies = (
 				03BB766E2665316900CE5A93 /* PBXTargetDependency */,
 			);
-			name = UnitTests;
+			name = RunnerTests;
 			productName = camera_exampleTests;
-			productReference = 03BB76682665316900CE5A93 /* UnitTests.xctest */;
+			productReference = 03BB76682665316900CE5A93 /* RunnerTests.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		97C146ED1CF9000F007C117D /* Runner */ = {
@@ -253,7 +253,7 @@
 			projectRoot = "";
 			targets = (
 				97C146ED1CF9000F007C117D /* Runner */,
-				03BB76672665316900CE5A93 /* UnitTests */,
+				03BB76672665316900CE5A93 /* RunnerTests */,
 			);
 		};
 /* End PBXProject section */
@@ -331,7 +331,7 @@
 			outputFileListPaths = (
 			);
 			outputPaths = (
-				"$(DERIVED_FILE_DIR)/Pods-UnitTests-checkManifestLockResult.txt",
+				"$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
@@ -360,7 +360,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				03BB766B2665316900CE5A93 /* CameraFocusTests.m in Sources */,
-				03BB767326653ABE00CE5A93 /* CameraPluginTests.m in Sources */,
+				334733EA2668111C00DCC49E /* CameraPluginTests.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -406,7 +406,7 @@
 /* Begin XCBuildConfiguration section */
 		03BB766F2665316900CE5A93 /* Debug */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = A903DC9BC9D1CB89BD4FB3CB /* Pods-UnitTests.debug.xcconfig */;
+			baseConfigurationReference = 40D9DDFB3787960D28DF3FB3 /* Pods-RunnerTests.debug.xcconfig */;
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -417,7 +417,7 @@
 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 				CODE_SIGN_STYLE = Automatic;
 				GCC_C_LANGUAGE_STANDARD = gnu11;
-				INFOPLIST_FILE = UnitTests/Info.plist;
+				INFOPLIST_FILE = RunnerTests/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
@@ -431,7 +431,7 @@
 		};
 		03BB76702665316900CE5A93 /* Release */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = C2D350ADCDFC81FCB0D6F12C /* Pods-UnitTests.release.xcconfig */;
+			baseConfigurationReference = D1FF8C34CA9E9BE702C5EC06 /* Pods-RunnerTests.release.xcconfig */;
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -442,7 +442,7 @@
 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 				CODE_SIGN_STYLE = Automatic;
 				GCC_C_LANGUAGE_STANDARD = gnu11;
-				INFOPLIST_FILE = UnitTests/Info.plist;
+				INFOPLIST_FILE = RunnerTests/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
 				MTL_FAST_MATH = YES;
@@ -606,7 +606,7 @@
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
-		03BB76712665316900CE5A93 /* Build configuration list for PBXNativeTarget "UnitTests" */ = {
+		03BB76712665316900CE5A93 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				03BB766F2665316900CE5A93 /* Debug */,
diff --git a/packages/camera/camera/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/camera/camera/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index d9bece2..1447e08 100644
--- a/packages/camera/camera/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/packages/camera/camera/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -42,8 +42,8 @@
             <BuildableReference
                BuildableIdentifier = "primary"
                BlueprintIdentifier = "03BB76672665316900CE5A93"
-               BuildableName = "UnitTests.xctest"
-               BlueprintName = "UnitTests"
+               BuildableName = "RunnerTests.xctest"
+               BlueprintName = "RunnerTests"
                ReferencedContainer = "container:Runner.xcodeproj">
             </BuildableReference>
          </TestableReference>
diff --git a/packages/camera/camera/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/camera/camera/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/packages/camera/camera/example/ios/Runner.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/camera/camera/example/ios/UnitTests/CameraFocusTests.m b/packages/camera/camera/example/ios/RunnerTests/CameraFocusTests.m
similarity index 100%
rename from packages/camera/camera/example/ios/UnitTests/CameraFocusTests.m
rename to packages/camera/camera/example/ios/RunnerTests/CameraFocusTests.m
diff --git a/packages/camera/camera/ios/Tests/CameraPluginTests.m b/packages/camera/camera/example/ios/RunnerTests/CameraPluginTests.m
similarity index 100%
rename from packages/camera/camera/ios/Tests/CameraPluginTests.m
rename to packages/camera/camera/example/ios/RunnerTests/CameraPluginTests.m
diff --git a/packages/camera/camera/example/ios/UnitTests/Info.plist b/packages/camera/camera/example/ios/RunnerTests/Info.plist
similarity index 100%
rename from packages/camera/camera/example/ios/UnitTests/Info.plist
rename to packages/camera/camera/example/ios/RunnerTests/Info.plist
diff --git a/packages/camera/camera/ios/camera.podspec b/packages/camera/camera/ios/camera.podspec
index 960f102..4f99553 100644
--- a/packages/camera/camera/ios/camera.podspec
+++ b/packages/camera/camera/ios/camera.podspec
@@ -19,8 +19,4 @@
 
   s.platform = :ios, '8.0'
   s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }
-
-  s.test_spec 'Tests' do |test_spec|
-    test_spec.source_files = 'Tests/**/*'
-  end
 end
diff --git a/packages/google_sign_in/google_sign_in/example/ios/Podfile b/packages/google_sign_in/google_sign_in/example/ios/Podfile
index 3924e59..60e9fb5 100644
--- a/packages/google_sign_in/google_sign_in/example/ios/Podfile
+++ b/packages/google_sign_in/google_sign_in/example/ios/Podfile
@@ -31,6 +31,8 @@
   flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
   target 'RunnerTests' do
     inherit! :search_paths
+
+    pod 'OCMock','3.5'
   end
 end
 
diff --git a/packages/google_sign_in/google_sign_in/example/ios/RunnerTests/GoogleSignInTests.m b/packages/google_sign_in/google_sign_in/example/ios/RunnerTests/GoogleSignInTests.m
index e96a7ab..adbf613 100644
--- a/packages/google_sign_in/google_sign_in/example/ios/RunnerTests/GoogleSignInTests.m
+++ b/packages/google_sign_in/google_sign_in/example/ios/RunnerTests/GoogleSignInTests.m
@@ -2,17 +2,155 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-@import google_sign_in;
-@import XCTest;
+@import Flutter;
 
-@interface GoogleSignInTests : XCTestCase
+@import XCTest;
+@import google_sign_in;
+@import GoogleSignIn;
+
+// OCMock library doesn't generate a valid modulemap.
+#import <OCMock/OCMock.h>
+
+@interface FLTGoogleSignInPluginTest : XCTestCase
+
+@property(strong, nonatomic) NSObject<FlutterBinaryMessenger> *mockBinaryMessenger;
+@property(strong, nonatomic) NSObject<FlutterPluginRegistrar> *mockPluginRegistrar;
+@property(strong, nonatomic) FLTGoogleSignInPlugin *plugin;
+@property(strong, nonatomic) GIDSignIn *mockSharedInstance;
+
 @end
 
-@implementation GoogleSignInTests
+@implementation FLTGoogleSignInPluginTest
 
-- (void)testPlugin {
-  FLTGoogleSignInPlugin* plugin = [[FLTGoogleSignInPlugin alloc] init];
-  XCTAssertNotNil(plugin);
+- (void)setUp {
+  [super setUp];
+  self.mockBinaryMessenger = OCMProtocolMock(@protocol(FlutterBinaryMessenger));
+  self.mockPluginRegistrar = OCMProtocolMock(@protocol(FlutterPluginRegistrar));
+  self.mockSharedInstance = [OCMockObject partialMockForObject:[GIDSignIn sharedInstance]];
+  OCMStub(self.mockPluginRegistrar.messenger).andReturn(self.mockBinaryMessenger);
+  self.plugin = [[FLTGoogleSignInPlugin alloc] init];
+  [FLTGoogleSignInPlugin registerWithRegistrar:self.mockPluginRegistrar];
+}
+
+- (void)tearDown {
+  [((OCMockObject *)self.mockSharedInstance) stopMocking];
+  [super tearDown];
+}
+
+- (void)testRequestScopesResultErrorIfNotSignedIn {
+  OCMStub(self.mockSharedInstance.currentUser).andReturn(nil);
+
+  FlutterMethodCall *methodCall =
+      [FlutterMethodCall methodCallWithMethodName:@"requestScopes"
+                                        arguments:@{@"scopes" : @[ @"mockScope1" ]}];
+
+  XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns true"];
+  __block id result;
+  [self.plugin handleMethodCall:methodCall
+                         result:^(id r) {
+                           [expectation fulfill];
+                           result = r;
+                         }];
+  [self waitForExpectations:@[ expectation ] timeout:5];
+  XCTAssertEqualObjects([((FlutterError *)result) code], @"sign_in_required");
+}
+
+- (void)testRequestScopesIfNoMissingScope {
+  // Mock Google Signin internal calls
+  GIDGoogleUser *mockUser = OCMClassMock(GIDGoogleUser.class);
+  OCMStub(self.mockSharedInstance.currentUser).andReturn(mockUser);
+  NSArray *requestedScopes = @[ @"mockScope1" ];
+  OCMStub(mockUser.grantedScopes).andReturn(requestedScopes);
+  FlutterMethodCall *methodCall =
+      [FlutterMethodCall methodCallWithMethodName:@"requestScopes"
+                                        arguments:@{@"scopes" : requestedScopes}];
+
+  XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns true"];
+  __block id result;
+  [self.plugin handleMethodCall:methodCall
+                         result:^(id r) {
+                           [expectation fulfill];
+                           result = r;
+                         }];
+  [self waitForExpectations:@[ expectation ] timeout:5];
+  XCTAssertTrue([result boolValue]);
+}
+
+- (void)testRequestScopesRequestsIfNotGranted {
+  // Mock Google Signin internal calls
+  GIDGoogleUser *mockUser = OCMClassMock(GIDGoogleUser.class);
+  OCMStub(self.mockSharedInstance.currentUser).andReturn(mockUser);
+  NSArray *requestedScopes = @[ @"mockScope1" ];
+  OCMStub(mockUser.grantedScopes).andReturn(@[]);
+
+  FlutterMethodCall *methodCall =
+      [FlutterMethodCall methodCallWithMethodName:@"requestScopes"
+                                        arguments:@{@"scopes" : requestedScopes}];
+
+  [self.plugin handleMethodCall:methodCall
+                         result:^(id r){
+                         }];
+
+  XCTAssertTrue([self.mockSharedInstance.scopes containsObject:@"mockScope1"]);
+  OCMVerify([self.mockSharedInstance signIn]);
+}
+
+- (void)testRequestScopesReturnsFalseIfNotGranted {
+  // Mock Google Signin internal calls
+  GIDGoogleUser *mockUser = OCMClassMock(GIDGoogleUser.class);
+  OCMStub(self.mockSharedInstance.currentUser).andReturn(mockUser);
+  NSArray *requestedScopes = @[ @"mockScope1" ];
+  OCMStub(mockUser.grantedScopes).andReturn(@[]);
+
+  OCMStub([self.mockSharedInstance signIn]).andDo(^(NSInvocation *invocation) {
+    [((NSObject<GIDSignInDelegate> *)self.plugin) signIn:self.mockSharedInstance
+                                        didSignInForUser:mockUser
+                                               withError:nil];
+  });
+
+  FlutterMethodCall *methodCall =
+      [FlutterMethodCall methodCallWithMethodName:@"requestScopes"
+                                        arguments:@{@"scopes" : requestedScopes}];
+
+  XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns false"];
+  __block id result;
+  [self.plugin handleMethodCall:methodCall
+                         result:^(id r) {
+                           [expectation fulfill];
+                           result = r;
+                         }];
+  [self waitForExpectations:@[ expectation ] timeout:5];
+  XCTAssertFalse([result boolValue]);
+}
+
+- (void)testRequestScopesReturnsTrueIfGranted {
+  // Mock Google Signin internal calls
+  GIDGoogleUser *mockUser = OCMClassMock(GIDGoogleUser.class);
+  OCMStub(self.mockSharedInstance.currentUser).andReturn(mockUser);
+  NSArray *requestedScopes = @[ @"mockScope1" ];
+  NSMutableArray *availableScopes = [NSMutableArray new];
+  OCMStub(mockUser.grantedScopes).andReturn(availableScopes);
+
+  OCMStub([self.mockSharedInstance signIn]).andDo(^(NSInvocation *invocation) {
+    [availableScopes addObject:@"mockScope1"];
+    [((NSObject<GIDSignInDelegate> *)self.plugin) signIn:self.mockSharedInstance
+                                        didSignInForUser:mockUser
+                                               withError:nil];
+  });
+
+  FlutterMethodCall *methodCall =
+      [FlutterMethodCall methodCallWithMethodName:@"requestScopes"
+                                        arguments:@{@"scopes" : requestedScopes}];
+
+  XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns true"];
+  __block id result;
+  [self.plugin handleMethodCall:methodCall
+                         result:^(id r) {
+                           [expectation fulfill];
+                           result = r;
+                         }];
+  [self waitForExpectations:@[ expectation ] timeout:5];
+  XCTAssertTrue([result boolValue]);
 }
 
 @end
diff --git a/packages/google_sign_in/google_sign_in/ios/Tests/GoogleSignInPluginTest.m b/packages/google_sign_in/google_sign_in/ios/Tests/GoogleSignInPluginTest.m
deleted file mode 100644
index 0affe69..0000000
--- a/packages/google_sign_in/google_sign_in/ios/Tests/GoogleSignInPluginTest.m
+++ /dev/null
@@ -1,174 +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;
-
-@import XCTest;
-@import google_sign_in;
-@import GoogleSignIn;
-
-// OCMock library doesn't generate a valid modulemap.
-#import <OCMock/OCMock.h>
-
-@interface FLTGoogleSignInPluginTest : XCTestCase
-
-@property(strong, nonatomic) NSObject<FlutterBinaryMessenger> *mockBinaryMessenger;
-@property(strong, nonatomic) NSObject<FlutterPluginRegistrar> *mockPluginRegistrar;
-@property(strong, nonatomic) FLTGoogleSignInPlugin *plugin;
-@property(strong, nonatomic) GIDSignIn *mockSharedInstance;
-
-@end
-
-@implementation FLTGoogleSignInPluginTest
-
-- (void)setUp {
-  [super setUp];
-  self.mockBinaryMessenger = OCMProtocolMock(@protocol(FlutterBinaryMessenger));
-  self.mockPluginRegistrar = OCMProtocolMock(@protocol(FlutterPluginRegistrar));
-  self.mockSharedInstance = [OCMockObject partialMockForObject:[GIDSignIn sharedInstance]];
-  OCMStub(self.mockPluginRegistrar.messenger).andReturn(self.mockBinaryMessenger);
-  self.plugin = [[FLTGoogleSignInPlugin alloc] init];
-  [FLTGoogleSignInPlugin registerWithRegistrar:self.mockPluginRegistrar];
-}
-
-- (void)tearDown {
-  [((OCMockObject *)self.mockSharedInstance) stopMocking];
-  [super tearDown];
-}
-
-- (void)testRequestScopesResultErrorIfNotSignedIn {
-  OCMStub(self.mockSharedInstance.currentUser).andReturn(nil);
-
-  FlutterMethodCall *methodCall =
-      [FlutterMethodCall methodCallWithMethodName:@"requestScopes"
-                                        arguments:@{@"scopes" : @[ @"mockScope1" ]}];
-
-  XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns true"];
-  __block id result;
-  [self.plugin handleMethodCall:methodCall
-                         result:^(id r) {
-                           [expectation fulfill];
-                           result = r;
-                         }];
-  [self waitForExpectations:@[ expectation ] timeout:5];
-  XCTAssertEqualObjects([((FlutterError *)result) code], @"sign_in_required");
-}
-
-- (void)testRequestScopesIfNoMissingScope {
-  // Mock Google Signin internal calls
-  GIDGoogleUser *mockUser = OCMClassMock(GIDGoogleUser.class);
-  OCMStub(self.mockSharedInstance.currentUser).andReturn(mockUser);
-  NSArray *requestedScopes = @[ @"mockScope1" ];
-  OCMStub(mockUser.grantedScopes).andReturn(requestedScopes);
-  FlutterMethodCall *methodCall =
-      [FlutterMethodCall methodCallWithMethodName:@"requestScopes"
-                                        arguments:@{@"scopes" : requestedScopes}];
-
-  XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns true"];
-  __block id result;
-  [self.plugin handleMethodCall:methodCall
-                         result:^(id r) {
-                           [expectation fulfill];
-                           result = r;
-                         }];
-  [self waitForExpectations:@[ expectation ] timeout:5];
-  XCTAssertTrue([result boolValue]);
-}
-
-- (void)testRequestScopesRequestsIfNotGranted {
-  // Mock Google Signin internal calls
-  GIDGoogleUser *mockUser = OCMClassMock(GIDGoogleUser.class);
-  OCMStub(self.mockSharedInstance.currentUser).andReturn(mockUser);
-  NSArray *requestedScopes = @[ @"mockScope1" ];
-  OCMStub(mockUser.grantedScopes).andReturn(@[]);
-
-  FlutterMethodCall *methodCall =
-      [FlutterMethodCall methodCallWithMethodName:@"requestScopes"
-                                        arguments:@{@"scopes" : requestedScopes}];
-
-  [self.plugin handleMethodCall:methodCall
-                         result:^(id r){
-                         }];
-
-  XCTAssertTrue([self.mockSharedInstance.scopes containsObject:@"mockScope1"]);
-  OCMVerify([self.mockSharedInstance signIn]);
-}
-
-- (void)testRequestScopesReturnsFalseIfNotGranted {
-  // Mock Google Signin internal calls
-  GIDGoogleUser *mockUser = OCMClassMock(GIDGoogleUser.class);
-  OCMStub(self.mockSharedInstance.currentUser).andReturn(mockUser);
-  NSArray *requestedScopes = @[ @"mockScope1" ];
-  OCMStub(mockUser.grantedScopes).andReturn(@[]);
-
-  OCMStub([self.mockSharedInstance signIn]).andDo(^(NSInvocation *invocation) {
-    [((NSObject<GIDSignInDelegate> *)self.plugin) signIn:self.mockSharedInstance
-                                        didSignInForUser:mockUser
-                                               withError:nil];
-  });
-
-  FlutterMethodCall *methodCall =
-      [FlutterMethodCall methodCallWithMethodName:@"requestScopes"
-                                        arguments:@{@"scopes" : requestedScopes}];
-
-  XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns false"];
-  __block id result;
-  [self.plugin handleMethodCall:methodCall
-                         result:^(id r) {
-                           [expectation fulfill];
-                           result = r;
-                         }];
-  [self waitForExpectations:@[ expectation ] timeout:5];
-  XCTAssertFalse([result boolValue]);
-}
-
-- (void)testRequestScopesReturnsTrueIfGranted {
-  // Mock Google Signin internal calls
-  GIDGoogleUser *mockUser = OCMClassMock(GIDGoogleUser.class);
-  OCMStub(self.mockSharedInstance.currentUser).andReturn(mockUser);
-  NSArray *requestedScopes = @[ @"mockScope1" ];
-  NSMutableArray *availableScopes = [NSMutableArray new];
-  OCMStub(mockUser.grantedScopes).andReturn(availableScopes);
-
-  OCMStub([self.mockSharedInstance signIn]).andDo(^(NSInvocation *invocation) {
-    [availableScopes addObject:@"mockScope1"];
-    [((NSObject<GIDSignInDelegate> *)self.plugin) signIn:self.mockSharedInstance
-                                        didSignInForUser:mockUser
-                                               withError:nil];
-  });
-
-  FlutterMethodCall *methodCall =
-      [FlutterMethodCall methodCallWithMethodName:@"requestScopes"
-                                        arguments:@{@"scopes" : requestedScopes}];
-
-  XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns true"];
-  __block id result;
-  [self.plugin handleMethodCall:methodCall
-                         result:^(id r) {
-                           [expectation fulfill];
-                           result = r;
-                         }];
-  [self waitForExpectations:@[ expectation ] timeout:5];
-  XCTAssertTrue([result boolValue]);
-}
-
-- (void)testHostedDomainIfMissed {
-  FlutterMethodCall *methodCall =
-      [FlutterMethodCall methodCallWithMethodName:@"init"
-                                        arguments:@{
-                                          @"signInOption" : @"SignInOption.standard",
-                                          @"hostedDomain" : [NSNull null],
-                                        }];
-
-  XCTestExpectation *expectation =
-      [self expectationWithDescription:@"expect hostedDomain equals nil"];
-  [self.plugin handleMethodCall:methodCall
-                         result:^(id r) {
-                           [expectation fulfill];
-                         }];
-  [self waitForExpectations:@[ expectation ] timeout:5];
-  XCTAssertTrue([self.mockSharedInstance.hostedDomain == nil]);
-}
-
-@end
diff --git a/packages/google_sign_in/google_sign_in/ios/google_sign_in.podspec b/packages/google_sign_in/google_sign_in/ios/google_sign_in.podspec
index 38ce53c..bf0b75f 100644
--- a/packages/google_sign_in/google_sign_in/ios/google_sign_in.podspec
+++ b/packages/google_sign_in/google_sign_in/ios/google_sign_in.podspec
@@ -20,9 +20,4 @@
 
   s.platform = :ios, '8.0'
   s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }
-
-  s.test_spec 'Tests' do |test_spec|
-    test_spec.source_files = 'Tests/**/*'
-    test_spec.dependency 'OCMock','3.5'
-  end
 end
diff --git a/packages/image_picker/image_picker/example/ios/Podfile b/packages/image_picker/image_picker/example/ios/Podfile
index 48f7bbc..75efae4 100644
--- a/packages/image_picker/image_picker/example/ios/Podfile
+++ b/packages/image_picker/image_picker/example/ios/Podfile
@@ -30,6 +30,9 @@
 target 'Runner' do
   flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
 
+  target 'RunnerTests' do
+    inherit! :search_paths
+  end
   target 'RunnerUITests' do
     inherit! :search_paths
   end
diff --git a/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj b/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj
index 4ea0e74..ef31565 100644
--- a/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj
@@ -7,27 +7,36 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		334733FC266813EE00DCC49E /* ImageUtilTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FC8F0ED229FB90B00C8D58F /* ImageUtilTests.m */; };
+		334733FD266813F100DCC49E /* MetaDataUtilTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 680049252280D736006DD6AB /* MetaDataUtilTests.m */; };
+		334733FE266813F400DCC49E /* PhotoAssetUtilTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 68F4B463228B3AB500C25614 /* PhotoAssetUtilTests.m */; };
+		334733FF266813FA00DCC49E /* ImagePickerTestImages.m in Sources */ = {isa = PBXBuildFile; fileRef = F78AF3182342D9D7008449C7 /* ImagePickerTestImages.m */; };
+		33473400266813FD00DCC49E /* ImagePickerPluginTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 68B9AF71243E4B3F00927CE4 /* ImagePickerPluginTests.m */; };
+		3A72BAD3FAE6E0FA9D80826B /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 35AE65F25E0B8C8214D8372B /* libPods-RunnerTests.a */; };
 		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+		56E9C6956BC15C647C89EB23 /* libPods-RunnerUITests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A908FAEEA2A9B26D903C09C5 /* libPods-RunnerUITests.a */; };
 		5C9513011EC38BD300040975 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C9513001EC38BD300040975 /* GeneratedPluginRegistrant.m */; };
-		680049262280D736006DD6AB /* MetaDataUtilTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 680049252280D736006DD6AB /* MetaDataUtilTests.m */; };
 		680049382280F2B9006DD6AB /* pngImage.png in Resources */ = {isa = PBXBuildFile; fileRef = 680049352280F2B8006DD6AB /* pngImage.png */; };
 		680049392280F2B9006DD6AB /* jpgImage.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 680049362280F2B8006DD6AB /* jpgImage.jpg */; };
 		6801C8392555D726009DAF8D /* ImagePickerFromGalleryUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6801C8382555D726009DAF8D /* ImagePickerFromGalleryUITests.m */; };
-		68B9AF72243E4B3F00927CE4 /* ImagePickerPluginTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 68B9AF71243E4B3F00927CE4 /* ImagePickerPluginTests.m */; };
-		68F4B464228B3AB500C25614 /* PhotoAssetUtilTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 68F4B463228B3AB500C25614 /* PhotoAssetUtilTests.m */; };
 		978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
 		97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
 		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
 		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
 		9FC8F0E9229FA49E00C8D58F /* gifImage.gif in Resources */ = {isa = PBXBuildFile; fileRef = 9FC8F0E8229FA49E00C8D58F /* gifImage.gif */; };
 		9FC8F0EC229FA68500C8D58F /* gifImage.gif in Resources */ = {isa = PBXBuildFile; fileRef = 9FC8F0E8229FA49E00C8D58F /* gifImage.gif */; };
-		9FC8F0EE229FB90B00C8D58F /* ImageUtilTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FC8F0ED229FB90B00C8D58F /* ImageUtilTests.m */; };
 		BE7AEE7926403CC8006181AA /* ImagePickerFromLimitedGalleryUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = BE7AEE7826403CC8006181AA /* ImagePickerFromLimitedGalleryUITests.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 */
+		334733F72668136400DCC49E /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 97C146E61CF9000F007C117D /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 97C146ED1CF9000F007C117D;
+			remoteInfo = Runner;
+		};
 		6801C83B2555D726009DAF8D /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 97C146E61CF9000F007C117D /* Project object */;
@@ -58,21 +67,25 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
+		0C7B151765FD4249454C49AD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
 		15BE72415096DFE5D077E563 /* Pods-RunnerUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerUITests/Pods-RunnerUITests.debug.xcconfig"; sourceTree = "<group>"; };
+		334733F22668136400DCC49E /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		334733F62668136400DCC49E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		35AE65F25E0B8C8214D8372B /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.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>"; };
 		515A7EC9B4C971C01E672CF8 /* Pods-RunnerUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerUITests/Pods-RunnerUITests.release.xcconfig"; sourceTree = "<group>"; };
 		5A9D31B91557877A0E8EF3E7 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
 		5C9512FF1EC38BD300040975 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
 		5C9513001EC38BD300040975 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
-		680049252280D736006DD6AB /* MetaDataUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MetaDataUtilTests.m; path = ../../../ios/Tests/MetaDataUtilTests.m; sourceTree = "<group>"; };
+		680049252280D736006DD6AB /* MetaDataUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MetaDataUtilTests.m; sourceTree = "<group>"; };
 		680049352280F2B8006DD6AB /* pngImage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pngImage.png; sourceTree = "<group>"; };
 		680049362280F2B8006DD6AB /* jpgImage.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = jpgImage.jpg; sourceTree = "<group>"; };
 		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 = "<group>"; };
 		6801C8362555D726009DAF8D /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		6801C8382555D726009DAF8D /* ImagePickerFromGalleryUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImagePickerFromGalleryUITests.m; sourceTree = "<group>"; };
 		6801C83A2555D726009DAF8D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		68B9AF71243E4B3F00927CE4 /* ImagePickerPluginTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ImagePickerPluginTests.m; path = ../../../ios/Tests/ImagePickerPluginTests.m; sourceTree = "<group>"; };
-		68F4B463228B3AB500C25614 /* PhotoAssetUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = PhotoAssetUtilTests.m; path = ../../../ios/Tests/PhotoAssetUtilTests.m; sourceTree = "<group>"; };
+		68B9AF71243E4B3F00927CE4 /* ImagePickerPluginTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImagePickerPluginTests.m; sourceTree = "<group>"; };
+		68F4B463228B3AB500C25614 /* PhotoAssetUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PhotoAssetUtilTests.m; sourceTree = "<group>"; };
 		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
 		7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
 		7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
@@ -85,21 +98,31 @@
 		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>"; };
 		9FC8F0E8229FA49E00C8D58F /* gifImage.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = gifImage.gif; sourceTree = "<group>"; };
-		9FC8F0ED229FB90B00C8D58F /* ImageUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ImageUtilTests.m; path = ../../../ios/Tests/ImageUtilTests.m; sourceTree = "<group>"; };
+		9FC8F0ED229FB90B00C8D58F /* ImageUtilTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImageUtilTests.m; sourceTree = "<group>"; };
 		A908FAEEA2A9B26D903C09C5 /* libPods-RunnerUITests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerUITests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		BE7AEE6C26403C46006181AA /* RunnerUITestiOS14.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITestiOS14.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		BE7AEE7026403C46006181AA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		BE7AEE7826403CC8006181AA /* ImagePickerFromLimitedGalleryUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImagePickerFromLimitedGalleryUITests.m; sourceTree = "<group>"; };
+		DC6FCAAD4E7580C9B3C2E21D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
 		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 = "<group>"; };
-		F78AF3182342D9D7008449C7 /* ImagePickerTestImages.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ImagePickerTestImages.m; path = ../../../ios/Tests/ImagePickerTestImages.m; sourceTree = "<group>"; };
+		F78AF3172342D9D7008449C7 /* ImagePickerTestImages.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImagePickerTestImages.h; sourceTree = "<group>"; };
+		F78AF3182342D9D7008449C7 /* ImagePickerTestImages.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImagePickerTestImages.m; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
+		334733EF2668136400DCC49E /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				3A72BAD3FAE6E0FA9D80826B /* libPods-RunnerTests.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		6801C8332555D726009DAF8D /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				56E9C6956BC15C647C89EB23 /* libPods-RunnerUITests.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -121,6 +144,20 @@
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+		334733F32668136400DCC49E /* RunnerTests */ = {
+			isa = PBXGroup;
+			children = (
+				9FC8F0ED229FB90B00C8D58F /* ImageUtilTests.m */,
+				680049252280D736006DD6AB /* MetaDataUtilTests.m */,
+				68F4B463228B3AB500C25614 /* PhotoAssetUtilTests.m */,
+				F78AF3172342D9D7008449C7 /* ImagePickerTestImages.h */,
+				F78AF3182342D9D7008449C7 /* ImagePickerTestImages.m */,
+				68B9AF71243E4B3F00927CE4 /* ImagePickerPluginTests.m */,
+				334733F62668136400DCC49E /* Info.plist */,
+			);
+			path = RunnerTests;
+			sourceTree = "<group>";
+		};
 		680049282280E33D006DD6AB /* TestImages */ = {
 			isa = PBXGroup;
 			children = (
@@ -135,12 +172,6 @@
 			isa = PBXGroup;
 			children = (
 				6801C8382555D726009DAF8D /* ImagePickerFromGalleryUITests.m */,
-				9FC8F0ED229FB90B00C8D58F /* ImageUtilTests.m */,
-				680049252280D736006DD6AB /* MetaDataUtilTests.m */,
-				68F4B463228B3AB500C25614 /* PhotoAssetUtilTests.m */,
-				F78AF3172342D9D7008449C7 /* ImagePickerTestImages.h */,
-				F78AF3182342D9D7008449C7 /* ImagePickerTestImages.m */,
-				68B9AF71243E4B3F00927CE4 /* ImagePickerPluginTests.m */,
 				6801C83A2555D726009DAF8D /* Info.plist */,
 			);
 			path = RunnerUITests;
@@ -153,6 +184,8 @@
 				5A9D31B91557877A0E8EF3E7 /* Pods-Runner.release.xcconfig */,
 				15BE72415096DFE5D077E563 /* Pods-RunnerUITests.debug.xcconfig */,
 				515A7EC9B4C971C01E672CF8 /* Pods-RunnerUITests.release.xcconfig */,
+				DC6FCAAD4E7580C9B3C2E21D /* Pods-RunnerTests.debug.xcconfig */,
+				0C7B151765FD4249454C49AD /* Pods-RunnerTests.release.xcconfig */,
 			);
 			name = Pods;
 			sourceTree = "<group>";
@@ -174,6 +207,7 @@
 				680049282280E33D006DD6AB /* TestImages */,
 				9740EEB11CF90186004384FC /* Flutter */,
 				97C146F01CF9000F007C117D /* Runner */,
+				334733F32668136400DCC49E /* RunnerTests */,
 				6801C8372555D726009DAF8D /* RunnerUITests */,
 				BE7AEE6D26403C46006181AA /* RunnerUITestiOS14 */,
 				97C146EF1CF9000F007C117D /* Products */,
@@ -188,6 +222,7 @@
 				97C146EE1CF9000F007C117D /* Runner.app */,
 				6801C8362555D726009DAF8D /* RunnerUITests.xctest */,
 				BE7AEE6C26403C46006181AA /* RunnerUITestiOS14.xctest */,
+				334733F22668136400DCC49E /* RunnerTests.xctest */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -230,6 +265,7 @@
 			children = (
 				EC32F6993F4529982D9519F1 /* libPods-Runner.a */,
 				A908FAEEA2A9B26D903C09C5 /* libPods-RunnerUITests.a */,
+				35AE65F25E0B8C8214D8372B /* libPods-RunnerTests.a */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -237,6 +273,25 @@
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
+		334733F12668136400DCC49E /* RunnerTests */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 334733F92668136400DCC49E /* Build configuration list for PBXNativeTarget "RunnerTests" */;
+			buildPhases = (
+				B8739A4353234497CF76B597 /* [CP] Check Pods Manifest.lock */,
+				334733EE2668136400DCC49E /* Sources */,
+				334733EF2668136400DCC49E /* Frameworks */,
+				334733F02668136400DCC49E /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				334733F82668136400DCC49E /* PBXTargetDependency */,
+			);
+			name = RunnerTests;
+			productName = RunnerTests;
+			productReference = 334733F22668136400DCC49E /* RunnerTests.xctest */;
+			productType = "com.apple.product-type.bundle.unit-test";
+		};
 		6801C8352555D726009DAF8D /* RunnerUITests */ = {
 			isa = PBXNativeTarget;
 			buildConfigurationList = 6801C83F2555D726009DAF8D /* Build configuration list for PBXNativeTarget "RunnerUITests" */;
@@ -305,6 +360,11 @@
 				LastUpgradeCheck = 1100;
 				ORGANIZATIONNAME = "The Flutter Authors";
 				TargetAttributes = {
+					334733F12668136400DCC49E = {
+						CreatedOnToolsVersion = 12.5;
+						ProvisioningStyle = Automatic;
+						TestTargetID = 97C146ED1CF9000F007C117D;
+					};
 					6801C8352555D726009DAF8D = {
 						CreatedOnToolsVersion = 11.7;
 						ProvisioningStyle = Automatic;
@@ -339,6 +399,7 @@
 			projectRoot = "";
 			targets = (
 				97C146ED1CF9000F007C117D /* Runner */,
+				334733F12668136400DCC49E /* RunnerTests */,
 				6801C8352555D726009DAF8D /* RunnerUITests */,
 				BE7AEE6B26403C46006181AA /* RunnerUITestiOS14 */,
 			);
@@ -346,6 +407,13 @@
 /* End PBXProject section */
 
 /* Begin PBXResourcesBuildPhase section */
+		334733F02668136400DCC49E /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		6801C8342555D726009DAF8D /* Resources */ = {
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -445,19 +513,48 @@
 			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;
 		};
+		B8739A4353234497CF76B597 /* [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;
+		};
 /* End PBXShellScriptBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
+		334733EE2668136400DCC49E /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				334733FD266813F100DCC49E /* MetaDataUtilTests.m in Sources */,
+				334733FF266813FA00DCC49E /* ImagePickerTestImages.m in Sources */,
+				334733FC266813EE00DCC49E /* ImageUtilTests.m in Sources */,
+				33473400266813FD00DCC49E /* ImagePickerPluginTests.m in Sources */,
+				334733FE266813F400DCC49E /* PhotoAssetUtilTests.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		6801C8322555D726009DAF8D /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
 				6801C8392555D726009DAF8D /* ImagePickerFromGalleryUITests.m in Sources */,
-				9FC8F0EE229FB90B00C8D58F /* ImageUtilTests.m in Sources */,
-				F78AF3192342D9D7008449C7 /* ImagePickerTestImages.m in Sources */,
-				680049262280D736006DD6AB /* MetaDataUtilTests.m in Sources */,
-				68B9AF72243E4B3F00927CE4 /* ImagePickerPluginTests.m in Sources */,
-				68F4B464228B3AB500C25614 /* PhotoAssetUtilTests.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -482,6 +579,11 @@
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
+		334733F82668136400DCC49E /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 97C146ED1CF9000F007C117D /* Runner */;
+			targetProxy = 334733F72668136400DCC49E /* PBXContainerItemProxy */;
+		};
 		6801C83C2555D726009DAF8D /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			target = 97C146ED1CF9000F007C117D /* Runner */;
@@ -514,6 +616,34 @@
 /* End PBXVariantGroup section */
 
 /* Begin XCBuildConfiguration section */
+		334733FA2668136400DCC49E /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = DC6FCAAD4E7580C9B3C2E21D /* Pods-RunnerTests.debug.xcconfig */;
+			buildSettings = {
+				BUNDLE_LOADER = "$(TEST_HOST)";
+				CODE_SIGN_STYLE = Automatic;
+				INFOPLIST_FILE = RunnerTests/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.RunnerTests;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
+			};
+			name = Debug;
+		};
+		334733FB2668136400DCC49E /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 0C7B151765FD4249454C49AD /* Pods-RunnerTests.release.xcconfig */;
+			buildSettings = {
+				BUNDLE_LOADER = "$(TEST_HOST)";
+				CODE_SIGN_STYLE = Automatic;
+				INFOPLIST_FILE = RunnerTests/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.RunnerTests;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
+			};
+			name = Release;
+		};
 		6801C83D2555D726009DAF8D /* Debug */ = {
 			isa = XCBuildConfiguration;
 			baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
@@ -763,6 +893,15 @@
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
+		334733F92668136400DCC49E /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				334733FA2668136400DCC49E /* Debug */,
+				334733FB2668136400DCC49E /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 		6801C83F2555D726009DAF8D /* Build configuration list for PBXNativeTarget "RunnerUITests" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
diff --git a/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index b1f7ff2..b100e5c 100755
--- a/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -57,6 +57,16 @@
                ReferencedContainer = "container:Runner.xcodeproj">
             </BuildableReference>
          </TestableReference>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "334733F12668136400DCC49E"
+               BuildableName = "RunnerTests.xctest"
+               BlueprintName = "RunnerTests"
+               ReferencedContainer = "container:Runner.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
       </Testables>
    </TestAction>
    <LaunchAction
diff --git a/packages/image_picker/image_picker/ios/Tests/ImagePickerPluginTests.m b/packages/image_picker/image_picker/example/ios/RunnerTests/ImagePickerPluginTests.m
similarity index 100%
rename from packages/image_picker/image_picker/ios/Tests/ImagePickerPluginTests.m
rename to packages/image_picker/image_picker/example/ios/RunnerTests/ImagePickerPluginTests.m
diff --git a/packages/image_picker/image_picker/ios/Tests/ImagePickerTestImages.h b/packages/image_picker/image_picker/example/ios/RunnerTests/ImagePickerTestImages.h
similarity index 100%
rename from packages/image_picker/image_picker/ios/Tests/ImagePickerTestImages.h
rename to packages/image_picker/image_picker/example/ios/RunnerTests/ImagePickerTestImages.h
diff --git a/packages/image_picker/image_picker/ios/Tests/ImagePickerTestImages.m b/packages/image_picker/image_picker/example/ios/RunnerTests/ImagePickerTestImages.m
similarity index 100%
rename from packages/image_picker/image_picker/ios/Tests/ImagePickerTestImages.m
rename to packages/image_picker/image_picker/example/ios/RunnerTests/ImagePickerTestImages.m
diff --git a/packages/image_picker/image_picker/ios/Tests/ImageUtilTests.m b/packages/image_picker/image_picker/example/ios/RunnerTests/ImageUtilTests.m
similarity index 100%
rename from packages/image_picker/image_picker/ios/Tests/ImageUtilTests.m
rename to packages/image_picker/image_picker/example/ios/RunnerTests/ImageUtilTests.m
diff --git a/packages/camera/camera/example/ios/UnitTests/Info.plist b/packages/image_picker/image_picker/example/ios/RunnerTests/Info.plist
similarity index 100%
copy from packages/camera/camera/example/ios/UnitTests/Info.plist
copy to packages/image_picker/image_picker/example/ios/RunnerTests/Info.plist
diff --git a/packages/image_picker/image_picker/ios/Tests/MetaDataUtilTests.m b/packages/image_picker/image_picker/example/ios/RunnerTests/MetaDataUtilTests.m
similarity index 100%
rename from packages/image_picker/image_picker/ios/Tests/MetaDataUtilTests.m
rename to packages/image_picker/image_picker/example/ios/RunnerTests/MetaDataUtilTests.m
diff --git a/packages/image_picker/image_picker/ios/Tests/PhotoAssetUtilTests.m b/packages/image_picker/image_picker/example/ios/RunnerTests/PhotoAssetUtilTests.m
similarity index 100%
rename from packages/image_picker/image_picker/ios/Tests/PhotoAssetUtilTests.m
rename to packages/image_picker/image_picker/example/ios/RunnerTests/PhotoAssetUtilTests.m
diff --git a/packages/image_picker/image_picker/ios/image_picker.podspec b/packages/image_picker/image_picker/ios/image_picker.podspec
index f0c8aa4..0d33b79 100644
--- a/packages/image_picker/image_picker/ios/image_picker.podspec
+++ b/packages/image_picker/image_picker/ios/image_picker.podspec
@@ -19,8 +19,4 @@
   s.dependency 'Flutter'
   s.platform = :ios, '8.0'
   s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
-
-  s.test_spec 'Tests' do |test_spec|
-    test_spec.source_files = 'Tests/**/*'
-  end
 end
diff --git a/packages/in_app_purchase/in_app_purchase_ios/example/ios/Podfile b/packages/in_app_purchase/in_app_purchase_ios/example/ios/Podfile
index 7079e94..ae87502 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/example/ios/Podfile
+++ b/packages/in_app_purchase/in_app_purchase_ios/example/ios/Podfile
@@ -30,7 +30,7 @@
 target 'Runner' do
   flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
 
-  target 'in_app_purchase_pluginTests' do
+  target 'RunnerTests' do
     inherit! :search_paths
 
     # Matches in_app_purchase test_spec dependency.
diff --git a/packages/in_app_purchase/in_app_purchase_ios/example/ios/Runner.xcodeproj/project.pbxproj b/packages/in_app_purchase/in_app_purchase_ios/example/ios/Runner.xcodeproj/project.pbxproj
index 3f2cd3d..90a7f3e 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/in_app_purchase/in_app_purchase_ios/example/ios/Runner.xcodeproj/project.pbxproj
@@ -10,8 +10,8 @@
 		0FFCF66105590202CD84C7AA /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1630769A874F9381BC761FE1 /* libPods-Runner.a */; };
 		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
 		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
-		688DE35121F2A5A100EA2684 /* TranslatorTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 688DE35021F2A5A100EA2684 /* TranslatorTest.m */; };
-		6896B34621E9363700D37AEF /* ProductRequestHandlerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 6896B34521E9363700D37AEF /* ProductRequestHandlerTest.m */; };
+		688DE35121F2A5A100EA2684 /* TranslatorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 688DE35021F2A5A100EA2684 /* TranslatorTests.m */; };
+		6896B34621E9363700D37AEF /* ProductRequestHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6896B34521E9363700D37AEF /* ProductRequestHandlerTests.m */; };
 		6896B34C21EEB4B800D37AEF /* Stubs.m in Sources */ = {isa = PBXBuildFile; fileRef = 6896B34B21EEB4B800D37AEF /* Stubs.m */; };
 		978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
 		97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
@@ -19,9 +19,9 @@
 		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
 		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
 		A5279298219369C600FF69E6 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5279297219369C600FF69E6 /* StoreKit.framework */; };
-		A59001A721E69658004A3E5E /* InAppPurchasePluginTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A59001A621E69658004A3E5E /* InAppPurchasePluginTest.m */; };
-		F78AF3142342BC89008449C7 /* PaymentQueueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F78AF3132342BC89008449C7 /* PaymentQueueTest.m */; };
-		FF1D041E5E26858D1AF300BC /* libPods-in_app_purchase_pluginTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 28CC9057029D80DB8A500E56 /* libPods-in_app_purchase_pluginTests.a */; };
+		A59001A721E69658004A3E5E /* InAppPurchasePluginTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A59001A621E69658004A3E5E /* InAppPurchasePluginTests.m */; };
+		AB7252348F077C046D6617D3 /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 630DD71BB3F145A22B1DE15D /* libPods-RunnerTests.a */; };
+		F78AF3142342BC89008449C7 /* PaymentQueueTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F78AF3132342BC89008449C7 /* PaymentQueueTests.m */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -48,18 +48,18 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
+		027D04BC80EACAAB3B5232B8 /* 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>"; };
 		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>"; };
 		1630769A874F9381BC761FE1 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-		1F1978CCF9BBD9FE5606B43A /* Pods-in_app_purchase_pluginTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-in_app_purchase_pluginTests.release.xcconfig"; path = "Target Support Files/Pods-in_app_purchase_pluginTests/Pods-in_app_purchase_pluginTests.release.xcconfig"; sourceTree = "<group>"; };
+		194D4829A79EF6C7426B39F7 /* 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 = "<group>"; };
 		2550EB3A5A3E749A54ADCA2D /* 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>"; };
-		28CC9057029D80DB8A500E56 /* libPods-in_app_purchase_pluginTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-in_app_purchase_pluginTests.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>"; };
-		67D5CD73380CB78474FA613C /* Pods-in_app_purchase_pluginTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-in_app_purchase_pluginTests.debug.xcconfig"; path = "Target Support Files/Pods-in_app_purchase_pluginTests/Pods-in_app_purchase_pluginTests.debug.xcconfig"; sourceTree = "<group>"; };
-		688DE35021F2A5A100EA2684 /* TranslatorTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TranslatorTest.m; path = ../../../ios/Tests/TranslatorTest.m; sourceTree = "<group>"; };
-		6896B34521E9363700D37AEF /* ProductRequestHandlerTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ProductRequestHandlerTest.m; path = ../../../ios/Tests/ProductRequestHandlerTest.m; sourceTree = "<group>"; };
-		6896B34A21EEB4B800D37AEF /* Stubs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Stubs.h; path = ../../../ios/Tests/Stubs.h; sourceTree = "<group>"; };
-		6896B34B21EEB4B800D37AEF /* Stubs.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Stubs.m; path = ../../../ios/Tests/Stubs.m; sourceTree = "<group>"; };
+		630DD71BB3F145A22B1DE15D /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		688DE35021F2A5A100EA2684 /* TranslatorTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TranslatorTests.m; sourceTree = "<group>"; };
+		6896B34521E9363700D37AEF /* ProductRequestHandlerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ProductRequestHandlerTests.m; sourceTree = "<group>"; };
+		6896B34A21EEB4B800D37AEF /* Stubs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Stubs.h; sourceTree = "<group>"; };
+		6896B34B21EEB4B800D37AEF /* Stubs.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Stubs.m; sourceTree = "<group>"; };
 		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
 		7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
 		7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
@@ -72,12 +72,12 @@
 		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>"; };
 		A5279297219369C600FF69E6 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
-		A59001A421E69658004A3E5E /* in_app_purchase_pluginTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = in_app_purchase_pluginTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
-		A59001A621E69658004A3E5E /* InAppPurchasePluginTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = InAppPurchasePluginTest.m; path = ../../../ios/Tests/InAppPurchasePluginTest.m; sourceTree = "<group>"; };
+		A59001A421E69658004A3E5E /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		A59001A621E69658004A3E5E /* InAppPurchasePluginTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = InAppPurchasePluginTests.m; sourceTree = "<group>"; };
 		A59001A821E69658004A3E5E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		E4F9651425A612301059769C /* 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>"; };
 		F6E5D5F926131C4800C68BED /* Configuration.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = Configuration.storekit; sourceTree = "<group>"; };
-		F78AF3132342BC89008449C7 /* PaymentQueueTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PaymentQueueTest.m; path = ../../../ios/Tests/PaymentQueueTest.m; sourceTree = "<group>"; };
+		F78AF3132342BC89008449C7 /* PaymentQueueTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PaymentQueueTests.m; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -94,7 +94,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				FF1D041E5E26858D1AF300BC /* libPods-in_app_purchase_pluginTests.a in Frameworks */,
+				AB7252348F077C046D6617D3 /* libPods-RunnerTests.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -106,12 +106,19 @@
 			children = (
 				E4F9651425A612301059769C /* Pods-Runner.debug.xcconfig */,
 				2550EB3A5A3E749A54ADCA2D /* Pods-Runner.release.xcconfig */,
-				67D5CD73380CB78474FA613C /* Pods-in_app_purchase_pluginTests.debug.xcconfig */,
-				1F1978CCF9BBD9FE5606B43A /* Pods-in_app_purchase_pluginTests.release.xcconfig */,
+				194D4829A79EF6C7426B39F7 /* Pods-RunnerTests.debug.xcconfig */,
+				027D04BC80EACAAB3B5232B8 /* Pods-RunnerTests.release.xcconfig */,
 			);
 			path = Pods;
 			sourceTree = "<group>";
 		};
+		334733E826680E5900DCC49E /* Temp */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Temp;
+			sourceTree = "<group>";
+		};
 		9740EEB11CF90186004384FC /* Flutter */ = {
 			isa = PBXGroup;
 			children = (
@@ -126,9 +133,10 @@
 		97C146E51CF9000F007C117D = {
 			isa = PBXGroup;
 			children = (
+				334733E826680E5900DCC49E /* Temp */,
 				9740EEB11CF90186004384FC /* Flutter */,
 				97C146F01CF9000F007C117D /* Runner */,
-				A59001A521E69658004A3E5E /* in_app_purchase_pluginTests */,
+				A59001A521E69658004A3E5E /* RunnerTests */,
 				97C146EF1CF9000F007C117D /* Products */,
 				E4DB99639FAD8ADED6B572FC /* Frameworks */,
 				0B4403AC68C3196AECF5EF89 /* Pods */,
@@ -139,7 +147,7 @@
 			isa = PBXGroup;
 			children = (
 				97C146EE1CF9000F007C117D /* Runner.app */,
-				A59001A421E69658004A3E5E /* in_app_purchase_pluginTests.xctest */,
+				A59001A421E69658004A3E5E /* RunnerTests.xctest */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -169,18 +177,18 @@
 			name = "Supporting Files";
 			sourceTree = "<group>";
 		};
-		A59001A521E69658004A3E5E /* in_app_purchase_pluginTests */ = {
+		A59001A521E69658004A3E5E /* RunnerTests */ = {
 			isa = PBXGroup;
 			children = (
-				A59001A621E69658004A3E5E /* InAppPurchasePluginTest.m */,
-				6896B34521E9363700D37AEF /* ProductRequestHandlerTest.m */,
-				F78AF3132342BC89008449C7 /* PaymentQueueTest.m */,
 				A59001A821E69658004A3E5E /* Info.plist */,
 				6896B34A21EEB4B800D37AEF /* Stubs.h */,
 				6896B34B21EEB4B800D37AEF /* Stubs.m */,
-				688DE35021F2A5A100EA2684 /* TranslatorTest.m */,
+				A59001A621E69658004A3E5E /* InAppPurchasePluginTests.m */,
+				6896B34521E9363700D37AEF /* ProductRequestHandlerTests.m */,
+				F78AF3132342BC89008449C7 /* PaymentQueueTests.m */,
+				688DE35021F2A5A100EA2684 /* TranslatorTests.m */,
 			);
-			path = in_app_purchase_pluginTests;
+			path = RunnerTests;
 			sourceTree = "<group>";
 		};
 		E4DB99639FAD8ADED6B572FC /* Frameworks */ = {
@@ -188,7 +196,7 @@
 			children = (
 				A5279297219369C600FF69E6 /* StoreKit.framework */,
 				1630769A874F9381BC761FE1 /* libPods-Runner.a */,
-				28CC9057029D80DB8A500E56 /* libPods-in_app_purchase_pluginTests.a */,
+				630DD71BB3F145A22B1DE15D /* libPods-RunnerTests.a */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -217,9 +225,9 @@
 			productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
 			productType = "com.apple.product-type.application";
 		};
-		A59001A321E69658004A3E5E /* in_app_purchase_pluginTests */ = {
+		A59001A321E69658004A3E5E /* RunnerTests */ = {
 			isa = PBXNativeTarget;
-			buildConfigurationList = A59001AD21E69658004A3E5E /* Build configuration list for PBXNativeTarget "in_app_purchase_pluginTests" */;
+			buildConfigurationList = A59001AD21E69658004A3E5E /* Build configuration list for PBXNativeTarget "RunnerTests" */;
 			buildPhases = (
 				321E2F5767F55B0A360AA77E /* [CP] Check Pods Manifest.lock */,
 				A59001A021E69658004A3E5E /* Sources */,
@@ -231,9 +239,9 @@
 			dependencies = (
 				A59001AA21E69658004A3E5E /* PBXTargetDependency */,
 			);
-			name = in_app_purchase_pluginTests;
-			productName = in_app_purchase_pluginTests;
-			productReference = A59001A421E69658004A3E5E /* in_app_purchase_pluginTests.xctest */;
+			name = RunnerTests;
+			productName = RunnerTests;
+			productReference = A59001A421E69658004A3E5E /* RunnerTests.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 /* End PBXNativeTarget section */
@@ -275,7 +283,7 @@
 			projectRoot = "";
 			targets = (
 				97C146ED1CF9000F007C117D /* Runner */,
-				A59001A321E69658004A3E5E /* in_app_purchase_pluginTests */,
+				A59001A321E69658004A3E5E /* RunnerTests */,
 			);
 		};
 /* End PBXProject section */
@@ -317,7 +325,7 @@
 			outputFileListPaths = (
 			);
 			outputPaths = (
-				"$(DERIVED_FILE_DIR)/Pods-in_app_purchase_pluginTests-checkManifestLockResult.txt",
+				"$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
@@ -391,10 +399,10 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				F78AF3142342BC89008449C7 /* PaymentQueueTest.m in Sources */,
-				6896B34621E9363700D37AEF /* ProductRequestHandlerTest.m in Sources */,
-				688DE35121F2A5A100EA2684 /* TranslatorTest.m in Sources */,
-				A59001A721E69658004A3E5E /* InAppPurchasePluginTest.m in Sources */,
+				F78AF3142342BC89008449C7 /* PaymentQueueTests.m in Sources */,
+				6896B34621E9363700D37AEF /* ProductRequestHandlerTests.m in Sources */,
+				688DE35121F2A5A100EA2684 /* TranslatorTests.m in Sources */,
+				A59001A721E69658004A3E5E /* InAppPurchasePluginTests.m in Sources */,
 				6896B34C21EEB4B800D37AEF /* Stubs.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -585,7 +593,7 @@
 		};
 		A59001AB21E69658004A3E5E /* Debug */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 67D5CD73380CB78474FA613C /* Pods-in_app_purchase_pluginTests.debug.xcconfig */;
+			baseConfigurationReference = 194D4829A79EF6C7426B39F7 /* Pods-RunnerTests.debug.xcconfig */;
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -596,11 +604,11 @@
 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 				CODE_SIGN_STYLE = Automatic;
 				DEVELOPMENT_TEAM = "";
-				INFOPLIST_FILE = in_app_purchase_pluginTests/Info.plist;
+				INFOPLIST_FILE = RunnerTests/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
 				MTL_FAST_MATH = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = "sample.changme.in-app-purchase-pluginTests";
+				PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.RunnerTests;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
 			};
@@ -608,7 +616,7 @@
 		};
 		A59001AC21E69658004A3E5E /* Release */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 1F1978CCF9BBD9FE5606B43A /* Pods-in_app_purchase_pluginTests.release.xcconfig */;
+			baseConfigurationReference = 027D04BC80EACAAB3B5232B8 /* Pods-RunnerTests.release.xcconfig */;
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -619,10 +627,10 @@
 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 				CODE_SIGN_STYLE = Automatic;
 				DEVELOPMENT_TEAM = "";
-				INFOPLIST_FILE = in_app_purchase_pluginTests/Info.plist;
+				INFOPLIST_FILE = RunnerTests/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
 				MTL_FAST_MATH = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = "sample.changme.in-app-purchase-pluginTests";
+				PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.RunnerTests;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
 			};
@@ -649,7 +657,7 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
-		A59001AD21E69658004A3E5E /* Build configuration list for PBXNativeTarget "in_app_purchase_pluginTests" */ = {
+		A59001AD21E69658004A3E5E /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				A59001AB21E69658004A3E5E /* Debug */,
diff --git a/packages/in_app_purchase/in_app_purchase_ios/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/in_app_purchase/in_app_purchase_ios/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index e1fad2d..3bd47ec 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/packages/in_app_purchase/in_app_purchase_ios/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -42,8 +42,8 @@
             <BuildableReference
                BuildableIdentifier = "primary"
                BlueprintIdentifier = "A59001A321E69658004A3E5E"
-               BuildableName = "in_app_purchase_pluginTests.xctest"
-               BlueprintName = "in_app_purchase_pluginTests"
+               BuildableName = "RunnerTests.xctest"
+               BlueprintName = "RunnerTests"
                ReferencedContainer = "container:Runner.xcodeproj">
             </BuildableReference>
          </TestableReference>
diff --git a/packages/in_app_purchase/in_app_purchase_ios/ios/Tests/InAppPurchasePluginTest.m b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/InAppPurchasePluginTests.m
similarity index 100%
rename from packages/in_app_purchase/in_app_purchase_ios/ios/Tests/InAppPurchasePluginTest.m
rename to packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/InAppPurchasePluginTests.m
diff --git a/packages/in_app_purchase/in_app_purchase_ios/example/ios/in_app_purchase_pluginTests/Info.plist b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/Info.plist
similarity index 100%
rename from packages/in_app_purchase/in_app_purchase_ios/example/ios/in_app_purchase_pluginTests/Info.plist
rename to packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/Info.plist
diff --git a/packages/in_app_purchase/in_app_purchase_ios/ios/Tests/PaymentQueueTest.m b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/PaymentQueueTests.m
similarity index 100%
rename from packages/in_app_purchase/in_app_purchase_ios/ios/Tests/PaymentQueueTest.m
rename to packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/PaymentQueueTests.m
diff --git a/packages/in_app_purchase/in_app_purchase_ios/ios/Tests/ProductRequestHandlerTest.m b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/ProductRequestHandlerTests.m
similarity index 100%
rename from packages/in_app_purchase/in_app_purchase_ios/ios/Tests/ProductRequestHandlerTest.m
rename to packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/ProductRequestHandlerTests.m
diff --git a/packages/in_app_purchase/in_app_purchase_ios/ios/Tests/Stubs.h b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/Stubs.h
similarity index 100%
rename from packages/in_app_purchase/in_app_purchase_ios/ios/Tests/Stubs.h
rename to packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/Stubs.h
diff --git a/packages/in_app_purchase/in_app_purchase_ios/ios/Tests/Stubs.m b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/Stubs.m
similarity index 100%
rename from packages/in_app_purchase/in_app_purchase_ios/ios/Tests/Stubs.m
rename to packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/Stubs.m
diff --git a/packages/in_app_purchase/in_app_purchase_ios/ios/Tests/TranslatorTest.m b/packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/TranslatorTests.m
similarity index 100%
rename from packages/in_app_purchase/in_app_purchase_ios/ios/Tests/TranslatorTest.m
rename to packages/in_app_purchase/in_app_purchase_ios/example/ios/RunnerTests/TranslatorTests.m
diff --git a/packages/in_app_purchase/in_app_purchase_ios/ios/in_app_purchase_ios.podspec b/packages/in_app_purchase/in_app_purchase_ios/ios/in_app_purchase_ios.podspec
index c0fcc45..7852353 100644
--- a/packages/in_app_purchase/in_app_purchase_ios/ios/in_app_purchase_ios.podspec
+++ b/packages/in_app_purchase/in_app_purchase_ios/ios/in_app_purchase_ios.podspec
@@ -21,9 +21,4 @@
   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/**/*'
-    test_spec.dependency 'OCMock','3.5'
-  end
 end
diff --git a/packages/local_auth/example/ios/Podfile b/packages/local_auth/example/ios/Podfile
index 6549735..ef20d8e 100644
--- a/packages/local_auth/example/ios/Podfile
+++ b/packages/local_auth/example/ios/Podfile
@@ -30,7 +30,7 @@
 target 'Runner' do
   flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
 
-  target 'XCTests' do
+  target 'RunnerTests' do
     inherit! :search_paths
 
     pod 'OCMock', '3.5'
diff --git a/packages/local_auth/example/ios/Runner.xcodeproj/project.pbxproj b/packages/local_auth/example/ios/Runner.xcodeproj/project.pbxproj
index 708c643..9c95976 100644
--- a/packages/local_auth/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/local_auth/example/ios/Runner.xcodeproj/project.pbxproj
@@ -16,7 +16,7 @@
 		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 */; };
-		D6C28B8B9E1BDEC22D03304F /* libPods-XCTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EB178B442E18480B8054307 /* libPods-XCTests.a */; };
+		B726772E092FC537C9618264 /* libPods-RunnerTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 719FE2C7EAF8D9A045E09C29 /* libPods-RunnerTests.a */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -45,18 +45,17 @@
 /* Begin PBXFileReference section */
 		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>"; };
-		3398D2CD26163948005A052F /* XCTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XCTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		3398D2CD26163948005A052F /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		3398D2D126163948005A052F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		3398D2DC261649CD005A052F /* liblocal_auth.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liblocal_auth.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		3398D2DF26164A03005A052F /* liblocal_auth.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liblocal_auth.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		3398D2E326164AD8005A052F /* FLTLocalAuthPluginTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FLTLocalAuthPluginTests.m; path = ../../../ios/Tests/FLTLocalAuthPluginTests.m; sourceTree = "<group>"; };
+		3398D2E326164AD8005A052F /* FLTLocalAuthPluginTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLTLocalAuthPluginTests.m; sourceTree = "<group>"; };
 		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
-		4EB178B442E18480B8054307 /* libPods-XCTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-XCTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		658CDD04B21E4EA92F8EF229 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
+		719FE2C7EAF8D9A045E09C29 /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
 		7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
 		7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
-		81D8AFFB31AECDACBC5B11F8 /* Pods-XCTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-XCTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-XCTests/Pods-XCTests.debug.xcconfig"; sourceTree = "<group>"; };
 		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; };
@@ -65,9 +64,10 @@
 		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>"; };
+		99302E79EC77497F2F274D12 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
 		9D274A3F79473B1549B2BBD5 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		EB36DF6C3F25E00DF4175422 /* 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 = "<group>"; };
-		F6BEBFD3433B1712765D62F7 /* Pods-XCTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-XCTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-XCTests/Pods-XCTests.release.xcconfig"; sourceTree = "<group>"; };
+		FEA527BB0A821430FEAA1566 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -75,7 +75,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				D6C28B8B9E1BDEC22D03304F /* libPods-XCTests.a in Frameworks */,
+				B726772E092FC537C9618264 /* libPods-RunnerTests.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -90,13 +90,13 @@
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
-		3398D2CE26163948005A052F /* XCTests */ = {
+		33BF11D226680B2E002967F3 /* RunnerTests */ = {
 			isa = PBXGroup;
 			children = (
 				3398D2E326164AD8005A052F /* FLTLocalAuthPluginTests.m */,
 				3398D2D126163948005A052F /* Info.plist */,
 			);
-			path = XCTests;
+			path = RunnerTests;
 			sourceTree = "<group>";
 		};
 		9740EEB11CF90186004384FC /* Flutter */ = {
@@ -113,9 +113,9 @@
 		97C146E51CF9000F007C117D = {
 			isa = PBXGroup;
 			children = (
+				33BF11D226680B2E002967F3 /* RunnerTests */,
 				9740EEB11CF90186004384FC /* Flutter */,
 				97C146F01CF9000F007C117D /* Runner */,
-				3398D2CE26163948005A052F /* XCTests */,
 				97C146EF1CF9000F007C117D /* Products */,
 				F8CC53B854B121315C7319D2 /* Pods */,
 				E2D5FA899A019BD3E0DB0917 /* Frameworks */,
@@ -126,7 +126,7 @@
 			isa = PBXGroup;
 			children = (
 				97C146EE1CF9000F007C117D /* Runner.app */,
-				3398D2CD26163948005A052F /* XCTests.xctest */,
+				3398D2CD26163948005A052F /* RunnerTests.xctest */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -161,7 +161,7 @@
 				3398D2DF26164A03005A052F /* liblocal_auth.a */,
 				3398D2DC261649CD005A052F /* liblocal_auth.a */,
 				9D274A3F79473B1549B2BBD5 /* libPods-Runner.a */,
-				4EB178B442E18480B8054307 /* libPods-XCTests.a */,
+				719FE2C7EAF8D9A045E09C29 /* libPods-RunnerTests.a */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -171,8 +171,8 @@
 			children = (
 				EB36DF6C3F25E00DF4175422 /* Pods-Runner.debug.xcconfig */,
 				658CDD04B21E4EA92F8EF229 /* Pods-Runner.release.xcconfig */,
-				81D8AFFB31AECDACBC5B11F8 /* Pods-XCTests.debug.xcconfig */,
-				F6BEBFD3433B1712765D62F7 /* Pods-XCTests.release.xcconfig */,
+				99302E79EC77497F2F274D12 /* Pods-RunnerTests.debug.xcconfig */,
+				FEA527BB0A821430FEAA1566 /* Pods-RunnerTests.release.xcconfig */,
 			);
 			name = Pods;
 			sourceTree = "<group>";
@@ -180,9 +180,9 @@
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
-		3398D2CC26163948005A052F /* XCTests */ = {
+		3398D2CC26163948005A052F /* RunnerTests */ = {
 			isa = PBXNativeTarget;
-			buildConfigurationList = 3398D2D426163948005A052F /* Build configuration list for PBXNativeTarget "XCTests" */;
+			buildConfigurationList = 3398D2D426163948005A052F /* Build configuration list for PBXNativeTarget "RunnerTests" */;
 			buildPhases = (
 				B5AF6C7A6759E6F38749E537 /* [CP] Check Pods Manifest.lock */,
 				3398D2C926163948005A052F /* Sources */,
@@ -194,9 +194,9 @@
 			dependencies = (
 				3398D2D326163948005A052F /* PBXTargetDependency */,
 			);
-			name = XCTests;
-			productName = XCTests;
-			productReference = 3398D2CD26163948005A052F /* XCTests.xctest */;
+			name = RunnerTests;
+			productName = RunnerTests;
+			productReference = 3398D2CD26163948005A052F /* RunnerTests.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
 		};
 		97C146ED1CF9000F007C117D /* Runner */ = {
@@ -253,7 +253,7 @@
 			projectRoot = "";
 			targets = (
 				97C146ED1CF9000F007C117D /* Runner */,
-				3398D2CC26163948005A052F /* XCTests */,
+				3398D2CC26163948005A052F /* RunnerTests */,
 			);
 		};
 /* End PBXProject section */
@@ -341,7 +341,7 @@
 			outputFileListPaths = (
 			);
 			outputPaths = (
-				"$(DERIVED_FILE_DIR)/Pods-XCTests-checkManifestLockResult.txt",
+				"$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
@@ -401,7 +401,7 @@
 /* Begin XCBuildConfiguration section */
 		3398D2D526163948005A052F /* Debug */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = 81D8AFFB31AECDACBC5B11F8 /* Pods-XCTests.debug.xcconfig */;
+			baseConfigurationReference = 99302E79EC77497F2F274D12 /* Pods-RunnerTests.debug.xcconfig */;
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -411,12 +411,12 @@
 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 				CODE_SIGN_STYLE = Automatic;
 				GCC_C_LANGUAGE_STANDARD = gnu11;
-				INFOPLIST_FILE = XCTests/Info.plist;
+				INFOPLIST_FILE = RunnerTests/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				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.XCTests;
+				PRODUCT_BUNDLE_IDENTIFIER = com.google.RunnerTests;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				TARGETED_DEVICE_FAMILY = "1,2";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
@@ -425,7 +425,7 @@
 		};
 		3398D2D626163948005A052F /* Release */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = F6BEBFD3433B1712765D62F7 /* Pods-XCTests.release.xcconfig */;
+			baseConfigurationReference = FEA527BB0A821430FEAA1566 /* Pods-RunnerTests.release.xcconfig */;
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -435,11 +435,11 @@
 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 				CODE_SIGN_STYLE = Automatic;
 				GCC_C_LANGUAGE_STANDARD = gnu11;
-				INFOPLIST_FILE = XCTests/Info.plist;
+				INFOPLIST_FILE = RunnerTests/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
 				MTL_FAST_MATH = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = com.google.XCTests;
+				PRODUCT_BUNDLE_IDENTIFIER = com.google.RunnerTests;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				TARGETED_DEVICE_FAMILY = "1,2";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
@@ -597,7 +597,7 @@
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
-		3398D2D426163948005A052F /* Build configuration list for PBXNativeTarget "XCTests" */ = {
+		3398D2D426163948005A052F /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
 				3398D2D526163948005A052F /* Debug */,
diff --git a/packages/local_auth/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/local_auth/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 5b12c3a..58a5d07 100644
--- a/packages/local_auth/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/packages/local_auth/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -42,8 +42,8 @@
             <BuildableReference
                BuildableIdentifier = "primary"
                BlueprintIdentifier = "3398D2CC26163948005A052F"
-               BuildableName = "XCTests.xctest"
-               BlueprintName = "XCTests"
+               BuildableName = "RunnerTests.xctest"
+               BlueprintName = "RunnerTests"
                ReferencedContainer = "container:Runner.xcodeproj">
             </BuildableReference>
          </TestableReference>
diff --git a/packages/local_auth/ios/Tests/FLTLocalAuthPluginTests.m b/packages/local_auth/example/ios/RunnerTests/FLTLocalAuthPluginTests.m
similarity index 100%
rename from packages/local_auth/ios/Tests/FLTLocalAuthPluginTests.m
rename to packages/local_auth/example/ios/RunnerTests/FLTLocalAuthPluginTests.m
diff --git a/packages/local_auth/example/ios/XCTests/Info.plist b/packages/local_auth/example/ios/RunnerTests/Info.plist
similarity index 100%
rename from packages/local_auth/example/ios/XCTests/Info.plist
rename to packages/local_auth/example/ios/RunnerTests/Info.plist
diff --git a/packages/webview_flutter/example/ios/Runner.xcodeproj/project.pbxproj b/packages/webview_flutter/example/ios/Runner.xcodeproj/project.pbxproj
index e65843b..5a45c7f 100644
--- a/packages/webview_flutter/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/webview_flutter/example/ios/Runner.xcodeproj/project.pbxproj
@@ -8,9 +8,9 @@
 
 /* Begin PBXBuildFile section */
 		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+		334734012669319100DCC49E /* FLTWebViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 68BDCAF523C3F97800D9C032 /* FLTWebViewTests.m */; };
+		334734022669319400DCC49E /* FLTWKNavigationDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 686B4BF82548DBC7000AEA36 /* FLTWKNavigationDelegateTests.m */; };
 		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
-		686B4BF92548DBC7000AEA36 /* FLTWKNavigationDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 686B4BF82548DBC7000AEA36 /* FLTWKNavigationDelegateTests.m */; };
-		68BDCAF623C3F97800D9C032 /* FLTWebViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 68BDCAF523C3F97800D9C032 /* FLTWebViewTests.m */; };
 		978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
 		97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
 		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
@@ -57,10 +57,10 @@
 		1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
 		27CC950C9005575711528C12 /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.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>"; };
-		686B4BF82548DBC7000AEA36 /* FLTWKNavigationDelegateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FLTWKNavigationDelegateTests.m; path = ../../../ios/Tests/FLTWKNavigationDelegateTests.m; sourceTree = "<group>"; };
+		686B4BF82548DBC7000AEA36 /* FLTWKNavigationDelegateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLTWKNavigationDelegateTests.m; sourceTree = "<group>"; };
 		68BDCAE923C3F7CB00D9C032 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		68BDCAED23C3F7CB00D9C032 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		68BDCAF523C3F97800D9C032 /* FLTWebViewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FLTWebViewTests.m; path = ../../../ios/Tests/FLTWebViewTests.m; sourceTree = "<group>"; };
+		68BDCAF523C3F97800D9C032 /* FLTWebViewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLTWebViewTests.m; sourceTree = "<group>"; };
 		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
 		7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
 		7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
@@ -413,8 +413,8 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				68BDCAF623C3F97800D9C032 /* FLTWebViewTests.m in Sources */,
-				686B4BF92548DBC7000AEA36 /* FLTWKNavigationDelegateTests.m in Sources */,
+				334734012669319100DCC49E /* FLTWebViewTests.m in Sources */,
+				334734022669319400DCC49E /* FLTWKNavigationDelegateTests.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -479,8 +479,7 @@
 				CODE_SIGN_STYLE = Automatic;
 				INFOPLIST_FILE = RunnerTests/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				MTL_FAST_MATH = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.google.webview-flutter-exampleTests";
+				PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.RunnerTests;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
 			};
@@ -494,8 +493,7 @@
 				CODE_SIGN_STYLE = Automatic;
 				INFOPLIST_FILE = RunnerTests/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				MTL_FAST_MATH = YES;
-				PRODUCT_BUNDLE_IDENTIFIER = "com.google.webview-flutter-exampleTests";
+				PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.RunnerTests;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
 			};
diff --git a/packages/webview_flutter/ios/Tests/FLTWKNavigationDelegateTests.m b/packages/webview_flutter/example/ios/RunnerTests/FLTWKNavigationDelegateTests.m
similarity index 100%
rename from packages/webview_flutter/ios/Tests/FLTWKNavigationDelegateTests.m
rename to packages/webview_flutter/example/ios/RunnerTests/FLTWKNavigationDelegateTests.m
diff --git a/packages/webview_flutter/ios/Tests/FLTWebViewTests.m b/packages/webview_flutter/example/ios/RunnerTests/FLTWebViewTests.m
similarity index 100%
rename from packages/webview_flutter/ios/Tests/FLTWebViewTests.m
rename to packages/webview_flutter/example/ios/RunnerTests/FLTWebViewTests.m
diff --git a/packages/webview_flutter/ios/webview_flutter.podspec b/packages/webview_flutter/ios/webview_flutter.podspec
index 066dfaa..1602f1c 100644
--- a/packages/webview_flutter/ios/webview_flutter.podspec
+++ b/packages/webview_flutter/ios/webview_flutter.podspec
@@ -20,9 +20,4 @@
 
   s.platform = :ios, '8.0'
   s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
-
-  s.test_spec 'Tests' do |test_spec|
-    test_spec.source_files = 'Tests/**/*'
-    test_spec.dependency 'OCMock','3.5'
-  end
 end