diff --git a/experimental/README.md b/experimental/README.md index a442233b5..801a9e745 100644 --- a/experimental/README.md +++ b/experimental/README.md @@ -25,7 +25,10 @@ flutter channel stable ## Index -There aren't actually any samples in here just yet. Things are coming, though! +### [Add-to-App](add_to_app) + +This project shows how to add a Flutter module to existing Android and iOS +applications. ## Want more info about the repo in general? diff --git a/experimental/add_to_app/README.md b/experimental/add_to_app/README.md new file mode 100644 index 000000000..9ae56a0a1 --- /dev/null +++ b/experimental/add_to_app/README.md @@ -0,0 +1,43 @@ +# Add-to-App Sample + +***The Add-to-App sample is designed to build with Flutter's `master` channel. See +the [README](../README.md) in the `experimental` directory for details.*** + +This directory contains a bunch of Android and iOS projects that each import +a standalone Flutter module called `example_module`. + +## Goals for this sample + +* Show developers how to add Flutter to their existing applications. + +## The important bits + +### `example_module` + +This is the Flutter module that'll be added to all the individual projects +in the `add2app` folder. + +### `SimpleIOSExample` + +An iOS application that imports `example_module` and uses it to display +a `FlutterViewController` containing widgets from the module. This project +uses CocoaPods, so prior to running it for the first time, use this command +to set up the workspace file: + +```bash +cd SimpleIOSExample +pod install +``` + +## Questions/issues + +If you have a general question about incorporating Flutter into an existing +iOS or Android app, the best places to go are: + +* [The FlutterDev Google Group](https://groups.google.com/forum/#!forum/flutter-dev) +* [The Flutter Gitter channel](https://gitter.im/flutter/flutter) +* [StackOverflow](https://stackoverflow.com/questions/tagged/flutter) + +If you run into an issue with the sample itself, please file an issue +in the [main Flutter repo](https://github.com/flutter/flutter/issues). + diff --git a/experimental/add_to_app/SimpleIOSExample/.gitignore b/experimental/add_to_app/SimpleIOSExample/.gitignore new file mode 100644 index 000000000..43dd6468f --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/.gitignore @@ -0,0 +1,14 @@ +## User settings +xcuserdata/ + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +.build/ + +Pods diff --git a/experimental/add_to_app/SimpleIOSExample/Podfile b/experimental/add_to_app/SimpleIOSExample/Podfile new file mode 100644 index 000000000..0c2d93e2e --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/Podfile @@ -0,0 +1,27 @@ +# Uncomment the next line to define a global platform for your project +# platform :ios, '9.0' + +# These three lines add the dependencies for example_module to the workspace +# for the project: +flutter_application_path = '../example_module' +`pushd "#{flutter_application_path}" && flutter create . && popd` +load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb') + +target 'SimpleIOSExample' do + # Comment the next line if you don't want to use dynamic frameworks + use_frameworks! + + # Pods for SimpleIOSExample + install_all_flutter_pods(flutter_application_path) + + target 'SimpleIOSExampleTests' do + inherit! :search_paths + # Pods for testing + end + + target 'SimpleIOSExampleUITests' do + inherit! :search_paths + # Pods for testing + end + +end diff --git a/experimental/add_to_app/SimpleIOSExample/Podfile.lock b/experimental/add_to_app/SimpleIOSExample/Podfile.lock new file mode 100644 index 000000000..5e7b957b3 --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/Podfile.lock @@ -0,0 +1,28 @@ +PODS: + - example_module (0.0.1): + - Flutter + - Flutter (1.0.0) + - FlutterPluginRegistrant (0.0.1): + - Flutter + +DEPENDENCIES: + - example_module (from `../example_module/.ios/Flutter`) + - Flutter (from `../example_module/.ios/Flutter/engine`) + - FlutterPluginRegistrant (from `../example_module/.ios/Flutter/FlutterPluginRegistrant`) + +EXTERNAL SOURCES: + example_module: + :path: "../example_module/.ios/Flutter" + Flutter: + :path: "../example_module/.ios/Flutter/engine" + FlutterPluginRegistrant: + :path: "../example_module/.ios/Flutter/FlutterPluginRegistrant" + +SPEC CHECKSUMS: + example_module: 9b3ae62667af6b748c59e68774be3d4760f9749b + Flutter: 58dd7d1b27887414a370fcccb9e645c08ffd7a6a + FlutterPluginRegistrant: 8855ca2b426d228cb41aa6c26c0c83b8c49e3593 + +PODFILE CHECKSUM: b7560f9a15a01771cb2ffbac185d4fd57e3250cc + +COCOAPODS: 1.7.2 diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcodeproj/project.pbxproj b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcodeproj/project.pbxproj new file mode 100644 index 000000000..ee3088e60 --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcodeproj/project.pbxproj @@ -0,0 +1,739 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 51; + objects = { + +/* Begin PBXBuildFile section */ + 089B0A49B5CDAC5BEB582783 /* Pods_SimpleIOSExampleTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B32A0D5514AB7569E79A7AC /* Pods_SimpleIOSExampleTests.framework */; }; + 269398B622FE040B00D983E5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 269398B522FE040B00D983E5 /* AppDelegate.swift */; }; + 269398B822FE040B00D983E5 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 269398B722FE040B00D983E5 /* ViewController.swift */; }; + 269398BB22FE040B00D983E5 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 269398B922FE040B00D983E5 /* Main.storyboard */; }; + 269398BD22FE040C00D983E5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 269398BC22FE040C00D983E5 /* Assets.xcassets */; }; + 269398C022FE040C00D983E5 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 269398BE22FE040C00D983E5 /* LaunchScreen.storyboard */; }; + 269398CB22FE040C00D983E5 /* SimpleIOSExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 269398CA22FE040C00D983E5 /* SimpleIOSExampleTests.swift */; }; + 269398D622FE040C00D983E5 /* SimpleIOSExampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 269398D522FE040C00D983E5 /* SimpleIOSExampleUITests.swift */; }; + 3BAF4B0BB21D52A8C5B43F0D /* Pods_SimpleIOSExampleUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 187D00DA4A16A93EC89D3156 /* Pods_SimpleIOSExampleUITests.framework */; }; + E0A2B399B1D9D1C350372AA4 /* Pods_SimpleIOSExample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 420E4B6E1B9E8603BA732F4C /* Pods_SimpleIOSExample.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 269398C722FE040C00D983E5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 269398AA22FE040B00D983E5 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 269398B122FE040B00D983E5; + remoteInfo = SimpleIOSExample; + }; + 269398D222FE040C00D983E5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 269398AA22FE040B00D983E5 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 269398B122FE040B00D983E5; + remoteInfo = SimpleIOSExample; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 187D00DA4A16A93EC89D3156 /* Pods_SimpleIOSExampleUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SimpleIOSExampleUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 269398B222FE040B00D983E5 /* SimpleIOSExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SimpleIOSExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 269398B522FE040B00D983E5 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 269398B722FE040B00D983E5 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 269398BA22FE040B00D983E5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 269398BC22FE040C00D983E5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 269398BF22FE040C00D983E5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 269398C122FE040C00D983E5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 269398C622FE040C00D983E5 /* SimpleIOSExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SimpleIOSExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 269398CA22FE040C00D983E5 /* SimpleIOSExampleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleIOSExampleTests.swift; sourceTree = ""; }; + 269398CC22FE040C00D983E5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 269398D122FE040C00D983E5 /* SimpleIOSExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SimpleIOSExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 269398D522FE040C00D983E5 /* SimpleIOSExampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleIOSExampleUITests.swift; sourceTree = ""; }; + 269398D722FE040C00D983E5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 363E426B1171FEC2C23089B1 /* Pods-SimpleIOSExampleUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SimpleIOSExampleUITests.debug.xcconfig"; path = "Target Support Files/Pods-SimpleIOSExampleUITests/Pods-SimpleIOSExampleUITests.debug.xcconfig"; sourceTree = ""; }; + 420E4B6E1B9E8603BA732F4C /* Pods_SimpleIOSExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SimpleIOSExample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 512008183DD83798F184EB14 /* Pods-SimpleIOSExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SimpleIOSExampleTests.release.xcconfig"; path = "Target Support Files/Pods-SimpleIOSExampleTests/Pods-SimpleIOSExampleTests.release.xcconfig"; sourceTree = ""; }; + 632513CDC364778478B972A7 /* Pods-SimpleIOSExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SimpleIOSExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-SimpleIOSExampleTests/Pods-SimpleIOSExampleTests.debug.xcconfig"; sourceTree = ""; }; + 63EEDB1909622120399C9B01 /* Pods-SimpleIOSExampleUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SimpleIOSExampleUITests.release.xcconfig"; path = "Target Support Files/Pods-SimpleIOSExampleUITests/Pods-SimpleIOSExampleUITests.release.xcconfig"; sourceTree = ""; }; + 8B32A0D5514AB7569E79A7AC /* Pods_SimpleIOSExampleTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SimpleIOSExampleTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A8146A98489E12B59C33EF6F /* Pods-SimpleIOSExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SimpleIOSExample.release.xcconfig"; path = "Target Support Files/Pods-SimpleIOSExample/Pods-SimpleIOSExample.release.xcconfig"; sourceTree = ""; }; + CD23F887F52055643A503855 /* Pods-SimpleIOSExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SimpleIOSExample.debug.xcconfig"; path = "Target Support Files/Pods-SimpleIOSExample/Pods-SimpleIOSExample.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 269398AF22FE040B00D983E5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E0A2B399B1D9D1C350372AA4 /* Pods_SimpleIOSExample.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 269398C322FE040C00D983E5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 089B0A49B5CDAC5BEB582783 /* Pods_SimpleIOSExampleTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 269398CE22FE040C00D983E5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3BAF4B0BB21D52A8C5B43F0D /* Pods_SimpleIOSExampleUITests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 269398A922FE040B00D983E5 = { + isa = PBXGroup; + children = ( + 269398B422FE040B00D983E5 /* SimpleIOSExample */, + 269398C922FE040C00D983E5 /* SimpleIOSExampleTests */, + 269398D422FE040C00D983E5 /* SimpleIOSExampleUITests */, + 269398B322FE040B00D983E5 /* Products */, + 62E8A3E08E9FD326CA7480FA /* Pods */, + 6A6CC3DA2402FC8ADB407559 /* Frameworks */, + ); + sourceTree = ""; + }; + 269398B322FE040B00D983E5 /* Products */ = { + isa = PBXGroup; + children = ( + 269398B222FE040B00D983E5 /* SimpleIOSExample.app */, + 269398C622FE040C00D983E5 /* SimpleIOSExampleTests.xctest */, + 269398D122FE040C00D983E5 /* SimpleIOSExampleUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 269398B422FE040B00D983E5 /* SimpleIOSExample */ = { + isa = PBXGroup; + children = ( + 269398B522FE040B00D983E5 /* AppDelegate.swift */, + 269398B722FE040B00D983E5 /* ViewController.swift */, + 269398B922FE040B00D983E5 /* Main.storyboard */, + 269398BC22FE040C00D983E5 /* Assets.xcassets */, + 269398BE22FE040C00D983E5 /* LaunchScreen.storyboard */, + 269398C122FE040C00D983E5 /* Info.plist */, + ); + path = SimpleIOSExample; + sourceTree = ""; + }; + 269398C922FE040C00D983E5 /* SimpleIOSExampleTests */ = { + isa = PBXGroup; + children = ( + 269398CA22FE040C00D983E5 /* SimpleIOSExampleTests.swift */, + 269398CC22FE040C00D983E5 /* Info.plist */, + ); + path = SimpleIOSExampleTests; + sourceTree = ""; + }; + 269398D422FE040C00D983E5 /* SimpleIOSExampleUITests */ = { + isa = PBXGroup; + children = ( + 269398D522FE040C00D983E5 /* SimpleIOSExampleUITests.swift */, + 269398D722FE040C00D983E5 /* Info.plist */, + ); + path = SimpleIOSExampleUITests; + sourceTree = ""; + }; + 62E8A3E08E9FD326CA7480FA /* Pods */ = { + isa = PBXGroup; + children = ( + CD23F887F52055643A503855 /* Pods-SimpleIOSExample.debug.xcconfig */, + A8146A98489E12B59C33EF6F /* Pods-SimpleIOSExample.release.xcconfig */, + 632513CDC364778478B972A7 /* Pods-SimpleIOSExampleTests.debug.xcconfig */, + 512008183DD83798F184EB14 /* Pods-SimpleIOSExampleTests.release.xcconfig */, + 363E426B1171FEC2C23089B1 /* Pods-SimpleIOSExampleUITests.debug.xcconfig */, + 63EEDB1909622120399C9B01 /* Pods-SimpleIOSExampleUITests.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + 6A6CC3DA2402FC8ADB407559 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 420E4B6E1B9E8603BA732F4C /* Pods_SimpleIOSExample.framework */, + 8B32A0D5514AB7569E79A7AC /* Pods_SimpleIOSExampleTests.framework */, + 187D00DA4A16A93EC89D3156 /* Pods_SimpleIOSExampleUITests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 269398B122FE040B00D983E5 /* SimpleIOSExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 269398DA22FE040C00D983E5 /* Build configuration list for PBXNativeTarget "SimpleIOSExample" */; + buildPhases = ( + 264AE55B6B867B61BC2CB1E8 /* [CP] Check Pods Manifest.lock */, + 6509A41456CCA1E3DEE35AC2 /* [CP-User] Run Flutter Build Script */, + 269398AE22FE040B00D983E5 /* Sources */, + 269398AF22FE040B00D983E5 /* Frameworks */, + 269398B022FE040B00D983E5 /* Resources */, + 57352AFF53A3C19AB9928E36 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SimpleIOSExample; + productName = SimpleIOSExample; + productReference = 269398B222FE040B00D983E5 /* SimpleIOSExample.app */; + productType = "com.apple.product-type.application"; + }; + 269398C522FE040C00D983E5 /* SimpleIOSExampleTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 269398DD22FE040C00D983E5 /* Build configuration list for PBXNativeTarget "SimpleIOSExampleTests" */; + buildPhases = ( + 80BDF3ACB9840F729397FA74 /* [CP] Check Pods Manifest.lock */, + 269398C222FE040C00D983E5 /* Sources */, + 269398C322FE040C00D983E5 /* Frameworks */, + 269398C422FE040C00D983E5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 269398C822FE040C00D983E5 /* PBXTargetDependency */, + ); + name = SimpleIOSExampleTests; + productName = SimpleIOSExampleTests; + productReference = 269398C622FE040C00D983E5 /* SimpleIOSExampleTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 269398D022FE040C00D983E5 /* SimpleIOSExampleUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 269398E022FE040C00D983E5 /* Build configuration list for PBXNativeTarget "SimpleIOSExampleUITests" */; + buildPhases = ( + 88A5719093C973643BCB1F37 /* [CP] Check Pods Manifest.lock */, + 269398CD22FE040C00D983E5 /* Sources */, + 269398CE22FE040C00D983E5 /* Frameworks */, + 269398CF22FE040C00D983E5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 269398D322FE040C00D983E5 /* PBXTargetDependency */, + ); + name = SimpleIOSExampleUITests; + productName = SimpleIOSExampleUITests; + productReference = 269398D122FE040C00D983E5 /* SimpleIOSExampleUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 269398AA22FE040B00D983E5 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1020; + LastUpgradeCheck = 1020; + TargetAttributes = { + 269398B122FE040B00D983E5 = { + CreatedOnToolsVersion = 10.2.1; + }; + 269398C522FE040C00D983E5 = { + CreatedOnToolsVersion = 10.2.1; + TestTargetID = 269398B122FE040B00D983E5; + }; + 269398D022FE040C00D983E5 = { + CreatedOnToolsVersion = 10.2.1; + TestTargetID = 269398B122FE040B00D983E5; + }; + }; + }; + buildConfigurationList = 269398AD22FE040B00D983E5 /* Build configuration list for PBXProject "SimpleIOSExample" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 269398A922FE040B00D983E5; + productRefGroup = 269398B322FE040B00D983E5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 269398B122FE040B00D983E5 /* SimpleIOSExample */, + 269398C522FE040C00D983E5 /* SimpleIOSExampleTests */, + 269398D022FE040C00D983E5 /* SimpleIOSExampleUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 269398B022FE040B00D983E5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 269398C022FE040C00D983E5 /* LaunchScreen.storyboard in Resources */, + 269398BD22FE040C00D983E5 /* Assets.xcassets in Resources */, + 269398BB22FE040B00D983E5 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 269398C422FE040C00D983E5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 269398CF22FE040C00D983E5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 264AE55B6B867B61BC2CB1E8 /* [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-SimpleIOSExample-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; + }; + 57352AFF53A3C19AB9928E36 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SimpleIOSExample/Pods-SimpleIOSExample-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SimpleIOSExample/Pods-SimpleIOSExample-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SimpleIOSExample/Pods-SimpleIOSExample-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 6509A41456CCA1E3DEE35AC2 /* [CP-User] Run Flutter Build Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${SRCROOT}/../example_module/.metadata", + "${SRCROOT}/../example_module/.ios/Flutter/App.framework/App", + "${SRCROOT}/../example_module/.ios/Flutter/engine/Flutter.framework/Flutter", + "${SRCROOT}/../example_module/.ios/Flutter/flutter_export_environment.sh", + ); + name = "[CP-User] Run Flutter Build Script"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "set -e\nset -u\nsource \"${SRCROOT}/../example_module/.ios/Flutter/flutter_export_environment.sh\"\n\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/xcode_backend.sh build"; + }; + 80BDF3ACB9840F729397FA74 /* [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-SimpleIOSExampleTests-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; + }; + 88A5719093C973643BCB1F37 /* [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-SimpleIOSExampleUITests-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 */ + 269398AE22FE040B00D983E5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 269398B822FE040B00D983E5 /* ViewController.swift in Sources */, + 269398B622FE040B00D983E5 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 269398C222FE040C00D983E5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 269398CB22FE040C00D983E5 /* SimpleIOSExampleTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 269398CD22FE040C00D983E5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 269398D622FE040C00D983E5 /* SimpleIOSExampleUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 269398C822FE040C00D983E5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 269398B122FE040B00D983E5 /* SimpleIOSExample */; + targetProxy = 269398C722FE040C00D983E5 /* PBXContainerItemProxy */; + }; + 269398D322FE040C00D983E5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 269398B122FE040B00D983E5 /* SimpleIOSExample */; + targetProxy = 269398D222FE040C00D983E5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 269398B922FE040B00D983E5 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 269398BA22FE040B00D983E5 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 269398BE22FE040C00D983E5 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 269398BF22FE040C00D983E5 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 269398D822FE040C00D983E5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.2; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 269398D922FE040C00D983E5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 269398DB22FE040C00D983E5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CD23F887F52055643A503855 /* Pods-SimpleIOSExample.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = SimpleIOSExample/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.example.SimpleIOSExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 269398DC22FE040C00D983E5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A8146A98489E12B59C33EF6F /* Pods-SimpleIOSExample.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = SimpleIOSExample/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.example.SimpleIOSExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 269398DE22FE040C00D983E5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 632513CDC364778478B972A7 /* Pods-SimpleIOSExampleTests.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = SimpleIOSExampleTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.example.SimpleIOSExampleTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SimpleIOSExample.app/SimpleIOSExample"; + }; + name = Debug; + }; + 269398DF22FE040C00D983E5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 512008183DD83798F184EB14 /* Pods-SimpleIOSExampleTests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = SimpleIOSExampleTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.example.SimpleIOSExampleTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SimpleIOSExample.app/SimpleIOSExample"; + }; + name = Release; + }; + 269398E122FE040C00D983E5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 363E426B1171FEC2C23089B1 /* Pods-SimpleIOSExampleUITests.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = SimpleIOSExampleUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.example.SimpleIOSExampleUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = SimpleIOSExample; + }; + name = Debug; + }; + 269398E222FE040C00D983E5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 63EEDB1909622120399C9B01 /* Pods-SimpleIOSExampleUITests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = SimpleIOSExampleUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.example.SimpleIOSExampleUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = SimpleIOSExample; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 269398AD22FE040B00D983E5 /* Build configuration list for PBXProject "SimpleIOSExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 269398D822FE040C00D983E5 /* Debug */, + 269398D922FE040C00D983E5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 269398DA22FE040C00D983E5 /* Build configuration list for PBXNativeTarget "SimpleIOSExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 269398DB22FE040C00D983E5 /* Debug */, + 269398DC22FE040C00D983E5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 269398DD22FE040C00D983E5 /* Build configuration list for PBXNativeTarget "SimpleIOSExampleTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 269398DE22FE040C00D983E5 /* Debug */, + 269398DF22FE040C00D983E5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 269398E022FE040C00D983E5 /* Build configuration list for PBXNativeTarget "SimpleIOSExampleUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 269398E122FE040C00D983E5 /* Debug */, + 269398E222FE040C00D983E5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 269398AA22FE040B00D983E5 /* Project object */; +} diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..72c6f54ec --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcworkspace/contents.xcworkspacedata b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..a2a42c6ce --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/AppDelegate.swift b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/AppDelegate.swift new file mode 100644 index 000000000..4bbefdd0e --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/AppDelegate.swift @@ -0,0 +1,21 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import UIKit +import Flutter + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + var flutterEngine : FlutterEngine?; + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + self.flutterEngine = FlutterEngine(name: "io.flutter", project: nil); + self.flutterEngine?.run(withEntrypoint: nil); + return true + } +} + diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d8db8d65f --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Assets.xcassets/Contents.json b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Assets.xcassets/Contents.json new file mode 100644 index 000000000..da4a164c9 --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Base.lproj/LaunchScreen.storyboard b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..bfa361294 --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Base.lproj/Main.storyboard b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Base.lproj/Main.storyboard new file mode 100644 index 000000000..ecba6efa5 --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Base.lproj/Main.storyboard @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Info.plist b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Info.plist new file mode 100644 index 000000000..16be3b681 --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/ViewController.swift b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/ViewController.swift new file mode 100644 index 000000000..363e79e29 --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExample/ViewController.swift @@ -0,0 +1,15 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import UIKit +import Flutter + +class ViewController: UIViewController { + + @IBAction func buttonWasTapped(_ sender: Any) { + let flutterEngine = (UIApplication.shared.delegate as? AppDelegate)?.flutterEngine; + let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)!; + self.present(flutterViewController, animated: false, completion: nil) + } +} diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExampleTests/Info.plist b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExampleTests/Info.plist new file mode 100644 index 000000000..6c40a6cd0 --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExampleTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExampleTests/SimpleIOSExampleTests.swift b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExampleTests/SimpleIOSExampleTests.swift new file mode 100644 index 000000000..f7f3840fc --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExampleTests/SimpleIOSExampleTests.swift @@ -0,0 +1,30 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import XCTest +@testable import SimpleIOSExample + +class SimpleIOSExampleTests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExampleUITests/Info.plist b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExampleUITests/Info.plist new file mode 100644 index 000000000..6c40a6cd0 --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExampleUITests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/experimental/add_to_app/SimpleIOSExample/SimpleIOSExampleUITests/SimpleIOSExampleUITests.swift b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExampleUITests/SimpleIOSExampleUITests.swift new file mode 100644 index 000000000..70ba51143 --- /dev/null +++ b/experimental/add_to_app/SimpleIOSExample/SimpleIOSExampleUITests/SimpleIOSExampleUITests.swift @@ -0,0 +1,30 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import XCTest + +class SimpleIOSExampleUITests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +} diff --git a/experimental/add_to_app/example_module/.gitignore b/experimental/add_to_app/example_module/.gitignore new file mode 100644 index 000000000..cdecf14aa --- /dev/null +++ b/experimental/add_to_app/example_module/.gitignore @@ -0,0 +1,41 @@ +.DS_Store +.dart_tool/ + +.packages +.pub/ + +.idea/ +.vagrant/ +.sconsign.dblite +.svn/ + +*.swp +profile + +DerivedData/ + +.generated/ + +*.pbxuser +*.mode1v3 +*.mode2v3 +*.perspectivev3 + +!default.pbxuser +!default.mode1v3 +!default.mode2v3 +!default.perspectivev3 + +xcuserdata + +*.moved-aside + +*.pyc +*sync/ +Icon? +.tags* + +build/ +.android/ +.ios/ +.flutter-plugins diff --git a/experimental/add_to_app/example_module/.metadata b/experimental/add_to_app/example_module/.metadata new file mode 100644 index 000000000..c50afd15a --- /dev/null +++ b/experimental/add_to_app/example_module/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 92ef2b9ce1d4e54d5efb3e6a962e9e724dc7efeb + channel: master + +project_type: module diff --git a/experimental/add_to_app/example_module/README.md b/experimental/add_to_app/example_module/README.md new file mode 100644 index 000000000..466cc2af4 --- /dev/null +++ b/experimental/add_to_app/example_module/README.md @@ -0,0 +1,4 @@ +# example_module + +A simple module to be embedded in other host apps, used to demo Flutter's +add-to-app process. diff --git a/experimental/add_to_app/example_module/analysis_options.yaml b/experimental/add_to_app/example_module/analysis_options.yaml new file mode 100644 index 000000000..b9a01f119 --- /dev/null +++ b/experimental/add_to_app/example_module/analysis_options.yaml @@ -0,0 +1,30 @@ +include: package:pedantic/analysis_options.1.7.0.yaml + +analyzer: + strong-mode: + implicit-casts: false + implicit-dynamic: false + +linter: + rules: + - avoid_types_on_closure_parameters + - avoid_void_async + - await_only_futures + - camel_case_types + - cancel_subscriptions + - close_sinks + - constant_identifier_names + - control_flow_in_finally + - empty_statements + - hash_and_equals + - implementation_imports + - non_constant_identifier_names + - package_api_docs + - package_names + - package_prefixed_library_names + - test_types_in_equals + - throw_in_finally + - unnecessary_brace_in_string_interps + - unnecessary_getters_setters + - unnecessary_new + - unnecessary_statements diff --git a/experimental/add_to_app/example_module/lib/main.dart b/experimental/add_to_app/example_module/lib/main.dart new file mode 100644 index 000000000..267418769 --- /dev/null +++ b/experimental/add_to_app/example_module/lib/main.dart @@ -0,0 +1,103 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +void main() => runApp(MyApp()); + +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Module Title', + routes: { + '/': (context) => FullScreenView(), + '/mini': (context) => MiniView(), + }, + ); + } +} + +class FullScreenView extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('A Full-screen Flutter View'), + ), + body: const MiniView(showExit: true), + ); + } +} + +class MiniView extends StatefulWidget { + final bool showExit; + + const MiniView({this.showExit = false}); + + @override + _MiniViewState createState() => _MiniViewState(); +} + +class _MiniViewState extends State { + int count = 0; + + @override + Widget build(BuildContext context) { + final mediaInfo = MediaQuery.of(context); + + return SizedBox.expand( + child: Stack( + children: [ + Positioned.fill( + child: DecoratedBox( + decoration: BoxDecoration( + color: Theme.of(context).scaffoldBackgroundColor, + ), + ), + ), + Positioned.fill( + child: Opacity( + opacity: .25, + child: FittedBox( + fit: BoxFit.cover, + child: FlutterLogo(), + ), + ), + ), + Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Window is ${mediaInfo.size.width} x ' + '${mediaInfo.size.height}.', + style: Theme.of(context).textTheme.headline, + ), + SizedBox(height: 16), + Text( + 'Taps: $count', + style: Theme.of(context).textTheme.headline, + ), + SizedBox(height: 16), + RaisedButton( + onPressed: () => setState(() => count++), + child: Text('Tap me!'), + ), + if (widget.showExit) ...[ + SizedBox(height: 16), + RaisedButton( + onPressed: () => SystemNavigator.pop(), + child: Text('Exit this screen'), + ), + ], + ], + ), + ), + ], + ), + ); + } +} diff --git a/experimental/add_to_app/example_module/pubspec.lock b/experimental/add_to_app/example_module/pubspec.lock new file mode 100644 index 000000000..cbde1827b --- /dev/null +++ b/experimental/add_to_app/example_module/pubspec.lock @@ -0,0 +1,139 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.14.11" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.5" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.7" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.4" + pedantic: + dependency: "direct dev" + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0+1" + quiver: + dependency: transitive + description: + name: quiver + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.5" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.3" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.5" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.8" +sdks: + dart: ">=2.4.0 <3.0.0" diff --git a/experimental/add_to_app/example_module/pubspec.yaml b/experimental/add_to_app/example_module/pubspec.yaml new file mode 100644 index 000000000..94eee3cf4 --- /dev/null +++ b/experimental/add_to_app/example_module/pubspec.yaml @@ -0,0 +1,30 @@ +name: example_module +description: A simple module used to demo Flutter's Add2App features + +version: 1.0.0 + +environment: + sdk: ">=2.4.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + pedantic: ^1.8.0+1 + +flutter: + uses-material-design: true + + # This section identifies your Flutter project as a module meant for + # embedding in a native host app. These identifiers should _not_ ordinarily + # be changed after generation - they are used to ensure that the tooling can + # maintain consistency when adding or modifying assets and plugins. + # They also do not have any bearing on your native host application's + # identifiers, which may be completely independent or the same as these. + module: + androidX: false + androidPackage: com.example.example_module + iosBundleIdentifier: com.example.exampleModule diff --git a/experimental/add_to_app/example_module/test/widget_test.dart b/experimental/add_to_app/example_module/test/widget_test.dart new file mode 100644 index 000000000..acee7afc2 --- /dev/null +++ b/experimental/add_to_app/example_module/test/widget_test.dart @@ -0,0 +1,12 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility that Flutter provides. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets('This test always passes', (tester) async {}); +}