Merge pull request #249 from billhollings/master

Update MoltenVK to v1.0.21
diff --git a/.travis.yml b/.travis.yml
index 77d9568..e483e6f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,8 @@
 language: objective-c 
 
 # macOS and Xcode Version
-# Xcode 9.2 running on macOS 10.12
-osx_image: xcode9.2
+# Xcode 9.4 running on macOS 10.13
+osx_image: xcode9.4
 
 # Build dependencies
 install:
@@ -15,6 +15,6 @@
     - External
 
 script:
-  - xcodebuild -scheme "MoltenVK (Debug)"
-  - xcodebuild -workspace Demos/Demos.xcworkspace -scheme "API-Samples-macOS"
+  - xcodebuild -scheme "MoltenVK Package (Release)"
+  - xcodebuild -workspace Demos/Demos.xcworkspace -scheme "Cube-macOS"
 
diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md
index 83969ec..8dee23b 100644
--- a/Docs/Whats_New.md
+++ b/Docs/Whats_New.md
@@ -12,16 +12,38 @@
 For best results, use a Markdown reader.*
 
 
+MoltenVK 1.0.21
+---------------
+
+Released 2018/09/08
+
+- Add support for extensions:
+    - VK_KHR_descriptor_update_template
+- Create 3D MTLTextureViews for 2D image views of 3D textures.
+- Allow building and packaging MoltenVK for of only iOS or only macOS.
+- Move packaging scripts out of Xcode projects and into script files.
+- vkUpdateDescriptorSet: Handle copies of uninitialized descriptors.
+- vkCmdFillBuffer & vkCmdCopyBuffers: Use dispatch call that supports older OS versions.
+- Update to latest SPIRV-Cross version:
+	- MSL: Emit F{Min,Max,Clamp} as fast:: and N{Min,Max,Clamp} as precise
+	- MSL: Implement multisampled array textures.
+	- MSL: Emit spvTexelBufferCoord() on ImageWrite to a Buffer.
+	- MSL: Handle interpolation qualifiers.
+	- MSL: Account for components when assigning locations to varyings.
+	- MSL: Do not emit function constants for version < 1.2.
+
+
+
 MoltenVK 1.0.20
 ---------------
 
 Released 2018/09/01
 
 - Add support for extensions:
-    - VK_KHR_maintenance1;
-	- VK_KHR_shader_draw_parameters;
-	- VK_KHR_get_physical_device_properties2;
-	- VK_KHR_push_descriptor;
+    - VK_KHR_maintenance1
+	- VK_KHR_shader_draw_parameters
+	- VK_KHR_get_physical_device_properties2
+	- VK_KHR_push_descriptor
 - Add ability to track and access supported and enabled extensions.
 - Update to latest SPIRV-Cross version.
 
diff --git a/ExternalRevisions/SPIRV-Cross_repo_revision b/ExternalRevisions/SPIRV-Cross_repo_revision
index 4537bdb..85beab5 100644
--- a/ExternalRevisions/SPIRV-Cross_repo_revision
+++ b/ExternalRevisions/SPIRV-Cross_repo_revision
@@ -1 +1 @@
-6fd66664e8bdadd3f6281aad711f771ef9c24bbe
+9ffd4172b46408ab6b03625b0f4f9cfafa5aaa71
diff --git a/MoltenVK/MoltenVK.xcodeproj/project.pbxproj b/MoltenVK/MoltenVK.xcodeproj/project.pbxproj
index 2f87edd..49c83e5 100644
--- a/MoltenVK/MoltenVK.xcodeproj/project.pbxproj
+++ b/MoltenVK/MoltenVK.xcodeproj/project.pbxproj
@@ -831,7 +831,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "set -e\n\nexport MVK_PROD_NAME=\"MoltenVK\"\nexport MVK_DYLIB_NAME=\"lib${MVK_PROD_NAME}.dylib\"\nexport MVK_BUILT_PROD_PATH=\"${BUILT_PRODUCTS_DIR}\"\nexport MVK_SYS_FWK_DIR=\"${SDK_DIR}/System/Library/Frameworks\"\nexport MVK_USR_LIB_DIR=\"${SDK_DIR}/usr/lib\"\n\nclang \\\n-dynamiclib \\\n-arch x86_64 \\\n-mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET} \\\n-compatibility_version 1.0.0 -current_version 1.0.0  \\\n-install_name \"@rpath/${MVK_DYLIB_NAME}\"  \\\n-Wno-incompatible-sysroot \\\n-isysroot ${SDK_DIR} \\\n-iframework ${MVK_SYS_FWK_DIR}  \\\n-framework Metal -framework IOSurface -framework IOKit -framework QuartzCore -framework Foundation \\\n--library-directory ${MVK_USR_LIB_DIR} \\\n-lSystem  -lc++ \\\n-o \"${MVK_BUILT_PROD_PATH}/${MVK_DYLIB_NAME}\" \\\n-force_load \"${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework/${MVK_PROD_NAME}\"\n";
+			shellScript = "${SRCROOT}/scripts/create_dylib_macos.sh";
 		};
 		A9731FAD1EDDAE39006B7298 /* Create Dynamic Library */ = {
 			isa = PBXShellScriptBuildPhase;
@@ -845,7 +845,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "set -e\n\nexport MVK_PROD_NAME=\"MoltenVK\"\nexport MVK_DYLIB_NAME=\"lib${MVK_PROD_NAME}.dylib\"\nexport MVK_BUILT_PROD_PATH=\"${BUILT_PRODUCTS_DIR}\"\nexport MVK_SYS_FWK_DIR=\"${SDK_DIR}/System/Library/Frameworks\"\nexport MVK_USR_LIB_DIR=\"${SDK_DIR}/usr/lib\"\n\n# Do not link to IOSurface if deploying to iOS versions below 11.0, doing so will\n# link IOSurface as a private framework, which will trigger App Store rejection.\nif [ $(echo \"${IPHONEOS_DEPLOYMENT_TARGET} >= 11.0\" | bc) -eq 1 ]\nthen\n    export MVK_IOSURFACE_FWK=\"-framework IOSurface\"\nelse\n    export MVK_IOSURFACE_FWK=\"\"\nfi\n\nclang \\\n-dynamiclib \\\n-arch arm64 \\\n-mios-version-min=${IPHONEOS_DEPLOYMENT_TARGET}  \\\n-compatibility_version 1.0.0 -current_version 1.0.0  \\\n-install_name \"@rpath/${MVK_DYLIB_NAME}\"  \\\n-Wno-incompatible-sysroot \\\n-isysroot ${SDK_DIR} \\\n-iframework ${MVK_SYS_FWK_DIR}  \\\n-framework Metal ${MVK_IOSURFACE_FWK} -framework UIKit -framework QuartzCore -framework Foundation \\\n--library-directory ${MVK_USR_LIB_DIR} \\\n-lSystem  -lc++ \\\n-o \"${MVK_BUILT_PROD_PATH}/${MVK_DYLIB_NAME}\" \\\n-force_load \"${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework/${MVK_PROD_NAME}\"\n";
+			shellScript = "${SRCROOT}/scripts/create_dylib_ios.sh";
 		};
 /* End PBXShellScriptBuildPhase section */
 
diff --git a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
index 22b891e..a089adf 100644
--- a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
+++ b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
@@ -48,7 +48,7 @@
  */
 #define MVK_VERSION_MAJOR   1
 #define MVK_VERSION_MINOR   0
-#define MVK_VERSION_PATCH   20
+#define MVK_VERSION_PATCH   21
 
 #define MVK_MAKE_VERSION(major, minor, patch)    (((major) * 10000) + ((minor) * 100) + (patch))
 #define MVK_VERSION     MVK_MAKE_VERSION(MVK_VERSION_MAJOR, MVK_VERSION_MINOR, MVK_VERSION_PATCH)
diff --git a/MoltenVK/scripts/create_dylib_ios.sh b/MoltenVK/scripts/create_dylib_ios.sh
new file mode 100755
index 0000000..544ea79
--- /dev/null
+++ b/MoltenVK/scripts/create_dylib_ios.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+set -e
+
+export MVK_PROD_NAME="MoltenVK"
+export MVK_DYLIB_NAME="lib${MVK_PROD_NAME}.dylib"
+export MVK_BUILT_PROD_PATH="${BUILT_PRODUCTS_DIR}"
+export MVK_SYS_FWK_DIR="${SDK_DIR}/System/Library/Frameworks"
+export MVK_USR_LIB_DIR="${SDK_DIR}/usr/lib"
+
+# Do not link to IOSurface if deploying to iOS versions below 11.0, doing so will
+# link IOSurface as a private framework, which will trigger App Store rejection.
+if [ $(echo "${IPHONEOS_DEPLOYMENT_TARGET} >= 11.0" | bc) -eq 1 ]
+then
+    export MVK_IOSURFACE_FWK="-framework IOSurface"
+else
+    export MVK_IOSURFACE_FWK=""
+fi
+
+clang \
+-dynamiclib \
+-arch arm64 \
+-mios-version-min=${IPHONEOS_DEPLOYMENT_TARGET}  \
+-compatibility_version 1.0.0 -current_version 1.0.0  \
+-install_name "@rpath/${MVK_DYLIB_NAME}"  \
+-Wno-incompatible-sysroot \
+-isysroot ${SDK_DIR} \
+-iframework ${MVK_SYS_FWK_DIR}  \
+-framework Metal ${MVK_IOSURFACE_FWK} -framework UIKit -framework QuartzCore -framework Foundation \
+--library-directory ${MVK_USR_LIB_DIR} \
+-lSystem  -lc++ \
+-o "${MVK_BUILT_PROD_PATH}/${MVK_DYLIB_NAME}" \
+-force_load "${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework/${MVK_PROD_NAME}"
diff --git a/MoltenVK/scripts/create_dylib_macos.sh b/MoltenVK/scripts/create_dylib_macos.sh
new file mode 100755
index 0000000..3e6b33b
--- /dev/null
+++ b/MoltenVK/scripts/create_dylib_macos.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+set -e
+
+export MVK_PROD_NAME="MoltenVK"
+export MVK_DYLIB_NAME="lib${MVK_PROD_NAME}.dylib"
+export MVK_BUILT_PROD_PATH="${BUILT_PRODUCTS_DIR}"
+export MVK_SYS_FWK_DIR="${SDK_DIR}/System/Library/Frameworks"
+export MVK_USR_LIB_DIR="${SDK_DIR}/usr/lib"
+
+clang \
+-dynamiclib \
+-arch x86_64 \
+-mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET} \
+-compatibility_version 1.0.0 -current_version 1.0.0  \
+-install_name "@rpath/${MVK_DYLIB_NAME}"  \
+-Wno-incompatible-sysroot \
+-isysroot ${SDK_DIR} \
+-iframework ${MVK_SYS_FWK_DIR}  \
+-framework Metal -framework IOSurface -framework IOKit -framework QuartzCore -framework Foundation \
+--library-directory ${MVK_USR_LIB_DIR} \
+-lSystem  -lc++ \
+-o "${MVK_BUILT_PROD_PATH}/${MVK_DYLIB_NAME}" \
+-force_load "${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework/${MVK_PROD_NAME}"
diff --git a/MoltenVKPackaging.xcodeproj/project.pbxproj b/MoltenVKPackaging.xcodeproj/project.pbxproj
index 3fea58c..e5d0fea 100644
--- a/MoltenVKPackaging.xcodeproj/project.pbxproj
+++ b/MoltenVKPackaging.xcodeproj/project.pbxproj
@@ -7,14 +7,40 @@
 	objects = {
 
 /* Begin PBXAggregateTarget section */
+		A975D5782140585200D4834F /* MoltenVK-iOS */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = A975D5882140585200D4834F /* Build configuration list for PBXAggregateTarget "MoltenVK-iOS" */;
+			buildPhases = (
+				A975D5872140585200D4834F /* Package MoltenVK */,
+			);
+			dependencies = (
+				A975D5792140585200D4834F /* PBXTargetDependency */,
+				A975D57D2140585200D4834F /* PBXTargetDependency */,
+				A975D5812140585200D4834F /* PBXTargetDependency */,
+			);
+			name = "MoltenVK-iOS";
+			productName = Package;
+		};
+		A975D58B2140586700D4834F /* MoltenVK-macOS */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = A975D59B2140586700D4834F /* Build configuration list for PBXAggregateTarget "MoltenVK-macOS" */;
+			buildPhases = (
+				A975D59A2140586700D4834F /* Package MoltenVK */,
+			);
+			dependencies = (
+				A975D58E2140586700D4834F /* PBXTargetDependency */,
+				A975D5922140586700D4834F /* PBXTargetDependency */,
+				A975D5962140586700D4834F /* PBXTargetDependency */,
+				A975D5982140586700D4834F /* PBXTargetDependency */,
+			);
+			name = "MoltenVK-macOS";
+			productName = Package;
+		};
 		A9FEADBC1F3517480010240E /* MoltenVK */ = {
 			isa = PBXAggregateTarget;
 			buildConfigurationList = A9FEADDC1F3517480010240E /* Build configuration list for PBXAggregateTarget "MoltenVK" */;
 			buildPhases = (
 				A9FEADD61F3517480010240E /* Package MoltenVK */,
-				A9FEADD71F3517480010240E /* Package MoltenVKShaderConverter */,
-				A9A5D8A61FB3AABA00F20475 /* Package Docs */,
-				A9FEADDB1F3517480010240E /* Update Latest */,
 			);
 			dependencies = (
 				A9FEADBD1F3517480010240E /* PBXTargetDependency */,
@@ -45,6 +71,55 @@
 			remoteGlobalIDString = A9CBEE011B6299D800E45FDC;
 			remoteInfo = "MoltenVK-macOS";
 		};
+		A975D57A2140585200D4834F /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = A92DB3EE1CE0F72500FBC835 /* MoltenVK.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = A9B8EE091A98D796009C5A02;
+			remoteInfo = "MoltenVK-iOS";
+		};
+		A975D57E2140585200D4834F /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = A92DB40E1CE0F89600FBC835 /* MoltenVKShaderConverter.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = A93903B81C57E9D700FE90DC;
+			remoteInfo = "MoltenVKSPIRVToMSLConverter-iOS";
+		};
+		A975D5822140585200D4834F /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = A92DB40E1CE0F89600FBC835 /* MoltenVKShaderConverter.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = A937472B1A9A8B2900F29B34;
+			remoteInfo = "MoltenVKGLSLToSPIRVConverter-iOS";
+		};
+		A975D58F2140586700D4834F /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = A92DB3EE1CE0F72500FBC835 /* MoltenVK.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = A9CBED861B6299D800E45FDC;
+			remoteInfo = "MoltenVK-macOS";
+		};
+		A975D5932140586700D4834F /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = A92DB40E1CE0F89600FBC835 /* MoltenVKShaderConverter.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = A93903C01C57E9ED00FE90DC;
+			remoteInfo = "MoltenVKSPIRVToMSLConverter-macOS";
+		};
+		A975D5972140586700D4834F /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = A92DB40E1CE0F89600FBC835 /* MoltenVKShaderConverter.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = A93747701A9A98D000F29B34;
+			remoteInfo = "MoltenVKGLSLToSPIRVConverter-macOS";
+		};
+		A975D5992140586700D4834F /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = A92DB40E1CE0F89600FBC835 /* MoltenVKShaderConverter.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = A9092A8C1A81717B00051823;
+			remoteInfo = MoltenVKShaderConverter;
+		};
 		A981498A1FB6B566005F00B4 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = A92DB40E1CE0F89600FBC835 /* MoltenVKShaderConverter.xcodeproj */;
@@ -138,6 +213,13 @@
 		A92DB3EE1CE0F72500FBC835 /* MoltenVK.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = MoltenVK.xcodeproj; path = MoltenVK/MoltenVK.xcodeproj; sourceTree = "<group>"; };
 		A92DB40E1CE0F89600FBC835 /* MoltenVKShaderConverter.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = MoltenVKShaderConverter.xcodeproj; path = MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj; sourceTree = "<group>"; };
 		A943100220546CDD00F5CF87 /* fetchDependencies */ = {isa = PBXFileReference; lastKnownFileType = text; name = fetchDependencies; path = ../fetchDependencies; sourceTree = "<group>"; };
+		A975D55C213F25D700D4834F /* create_dylib_ios.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = create_dylib_ios.sh; path = MoltenVK/scripts/create_dylib_ios.sh; sourceTree = SOURCE_ROOT; };
+		A975D55D213F266000D4834F /* create_dylib_macos.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = create_dylib_macos.sh; path = MoltenVK/scripts/create_dylib_macos.sh; sourceTree = SOURCE_ROOT; };
+		A975D561213F299500D4834F /* update_latest.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = update_latest.sh; sourceTree = "<group>"; };
+		A975D562213F2B7700D4834F /* package_docs.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = package_docs.sh; sourceTree = "<group>"; };
+		A975D566213F2DAA00D4834F /* package_shader_converter.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = package_shader_converter.sh; sourceTree = "<group>"; };
+		A975D573214050AB00D4834F /* package_moltenvk.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = package_moltenvk.sh; sourceTree = "<group>"; };
+		A975D5742140567B00D4834F /* package_all.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = package_all.sh; sourceTree = "<group>"; };
 		A98149E51FB78829005F00B4 /* MoltenVK_Runtime_UserGuide.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = MoltenVK_Runtime_UserGuide.md; path = Docs/MoltenVK_Runtime_UserGuide.md; sourceTree = "<group>"; };
 		A9AD67D12054E2D700ED3C08 /* VulkanSamples_repo_revision */ = {isa = PBXFileReference; lastKnownFileType = text; path = VulkanSamples_repo_revision; sourceTree = "<group>"; };
 		A9AD67D32054E2D700ED3C08 /* SPIRV-Cross_repo_revision */ = {isa = PBXFileReference; lastKnownFileType = text; path = "SPIRV-Cross_repo_revision"; sourceTree = "<group>"; };
@@ -154,6 +236,7 @@
 			children = (
 				A92DB3EE1CE0F72500FBC835 /* MoltenVK.xcodeproj */,
 				A92DB40E1CE0F89600FBC835 /* MoltenVKShaderConverter.xcodeproj */,
+				A975D55B213F25AD00D4834F /* Scripts */,
 				A92DB3E11CE0F34500FBC835 /* Docs */,
 				A939A6FB1F5479D0006ACA0C /* External */,
 			);
@@ -195,6 +278,20 @@
 			path = ExternalRevisions;
 			sourceTree = "<group>";
 		};
+		A975D55B213F25AD00D4834F /* Scripts */ = {
+			isa = PBXGroup;
+			children = (
+				A975D55C213F25D700D4834F /* create_dylib_ios.sh */,
+				A975D55D213F266000D4834F /* create_dylib_macos.sh */,
+				A975D5742140567B00D4834F /* package_all.sh */,
+				A975D562213F2B7700D4834F /* package_docs.sh */,
+				A975D573214050AB00D4834F /* package_moltenvk.sh */,
+				A975D566213F2DAA00D4834F /* package_shader_converter.sh */,
+				A975D561213F299500D4834F /* update_latest.sh */,
+			);
+			path = Scripts;
+			sourceTree = "<group>";
+		};
 		A98149741FB6B565005F00B4 /* Products */ = {
 			isa = PBXGroup;
 			children = (
@@ -242,6 +339,8 @@
 			projectRoot = "";
 			targets = (
 				A9FEADBC1F3517480010240E /* MoltenVK */,
+				A975D5782140585200D4834F /* MoltenVK-iOS */,
+				A975D58B2140586700D4834F /* MoltenVK-macOS */,
 			);
 		};
 /* End PBXProject section */
@@ -299,19 +398,33 @@
 /* End PBXReferenceProxy section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		A9A5D8A61FB3AABA00F20475 /* Package Docs */ = {
+		A975D5872140585200D4834F /* Package MoltenVK */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
 			);
 			inputPaths = (
 			);
-			name = "Package Docs";
+			name = "Package MoltenVK";
 			outputPaths = (
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "set -e\n\n# Package folder\nexport MVK_WKSPC_PATH=\"${PROJECT_DIR}\"\nexport MVK_PKG_LOCN=\"${MVK_WKSPC_PATH}/Package\"\nexport MVK_PKG_CONFIG_PATH=\"${MVK_PKG_LOCN}/${CONFIGURATION}\"\n\n# Copy the docs. Allow silent fail if a symlinked doc is not built.\ncp -a \"${MVK_WKSPC_PATH}/LICENSE\" \"${MVK_PKG_CONFIG_PATH}\"\ncp -pRLf \"${MVK_WKSPC_PATH}/Docs\" \"${MVK_PKG_CONFIG_PATH}\" 2> /dev/null || true\n";
+			shellScript = "${SRCROOT}/Scripts/package_all.sh";
+		};
+		A975D59A2140586700D4834F /* Package MoltenVK */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "Package MoltenVK";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "${SRCROOT}/Scripts/package_all.sh";
 		};
 		A9FEADD61F3517480010240E /* Package MoltenVK */ = {
 			isa = PBXShellScriptBuildPhase;
@@ -325,39 +438,46 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "set -e\n\n# Package folder\nexport MVK_PROD_NAME=\"MoltenVK\"\nexport MVK_DYLIB_NAME=\"lib${MVK_PROD_NAME}.dylib\"\nexport MVK_ICD_NAME=\"${MVK_PROD_NAME}_icd.json\"\nexport MVK_WKSPC_PATH=\"${PROJECT_DIR}\"\nexport MVK_PROD_PROJ_PATH=\"${MVK_WKSPC_PATH}/${MVK_PROD_NAME}\"\nexport MVK_PKG_LOCN=\"${MVK_WKSPC_PATH}/Package\"\nexport MVK_PKG_CONFIG_PATH=\"${MVK_PKG_LOCN}/${CONFIGURATION}\"\nexport MVK_PKG_PROD_PATH=\"${MVK_PKG_CONFIG_PATH}/${MVK_PROD_NAME}\"\n\n# Remove the product folder\nrm -rf \"${MVK_PKG_PROD_PATH}\"\n\n# Remove and replace the existing macOS framework folder and copy framework into it\nexport MVK_OS_PROD_PATH=\"${MVK_PKG_PROD_PATH}/macOS\"\nexport MVK_BUILT_PROD_PATH=\"${BUILT_PRODUCTS_DIR}\"\nrm -rf \"${MVK_OS_PROD_PATH}\"\nmkdir -p \"${MVK_OS_PROD_PATH}\"\ncp -a \"${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework\" \"${MVK_OS_PROD_PATH}\"\ncp -a \"${MVK_BUILT_PROD_PATH}/${MVK_DYLIB_NAME}\" \"${MVK_OS_PROD_PATH}\"\ncp -a \"${MVK_PROD_PROJ_PATH}/icd/${MVK_ICD_NAME}\" \"${MVK_OS_PROD_PATH}\"\n\n# Remove and replace the existing iOS framework folder and copy framework into it\nexport MVK_OS_PROD_PATH=\"${MVK_PKG_PROD_PATH}/iOS\"\nexport MVK_BUILT_PROD_PATH=\"${BUILT_PRODUCTS_DIR}/../${CONFIGURATION}-iphoneos\"\nrm -rf \"${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework/_CodeSignature\"\nrm -rf \"${MVK_OS_PROD_PATH}\"\nmkdir -p \"${MVK_OS_PROD_PATH}\"\ncp -a \"${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework\" \"${MVK_OS_PROD_PATH}\"\ncp -a \"${MVK_BUILT_PROD_PATH}/${MVK_DYLIB_NAME}\" \"${MVK_OS_PROD_PATH}\"\ncp -a \"${MVK_PROD_PROJ_PATH}/icd/${MVK_ICD_NAME}\" \"${MVK_OS_PROD_PATH}\"\n\n# Remove and replace header include folder\nrm -rf \"${MVK_PKG_PROD_PATH}/include\"\ncp -pRL \"${MVK_PROD_PROJ_PATH}/include\" \"${MVK_PKG_PROD_PATH}\"";
-		};
-		A9FEADD71F3517480010240E /* Package MoltenVKShaderConverter */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			name = "Package MoltenVKShaderConverter";
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "set -e\n\n# Package folder\nexport MVK_PROD_BASE_NAME=\"MoltenVKShaderConverter\"\nexport MVK_WKSPC_PATH=\"${PROJECT_DIR}\"\nexport MVK_PKG_LOCN=\"${MVK_WKSPC_PATH}/Package\"\n\n# Remove the base product folder\nrm -rf \"${MVK_PKG_LOCN}/${CONFIGURATION}/${MVK_PROD_BASE_NAME}\"\n\n#-----------------------------------\n# MoltenVKGLSLToSPIRVConverter\nexport MVK_PROD_NAME=\"MoltenVKGLSLToSPIRVConverter\"\nexport MVK_PKG_CONFIG_PATH=\"${MVK_PKG_LOCN}/${CONFIGURATION}/${MVK_PROD_BASE_NAME}/${MVK_PROD_NAME}\"\n\n# Remove and replace the existing macOS framework folder and copy framework into it\nexport MVK_OS_PROD_PATH=\"${MVK_PKG_CONFIG_PATH}/macOS\"\nexport MVK_BUILT_PROD_PATH=\"${BUILT_PRODUCTS_DIR}\"\nrm -rf \"${MVK_OS_PROD_PATH}\"\nmkdir -p \"${MVK_OS_PROD_PATH}\"\ncp -a \"${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework\" \"${MVK_OS_PROD_PATH}\"\n\n# Remove and replace the existing iOS framework folder and copy framework into it\nexport MVK_OS_PROD_PATH=\"${MVK_PKG_CONFIG_PATH}/iOS\"\nexport MVK_BUILT_PROD_PATH=\"${BUILT_PRODUCTS_DIR}/../${CONFIGURATION}-iphoneos\"\nrm -rf \"${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework/_CodeSignature\"\nrm -rf \"${MVK_OS_PROD_PATH}\"\nmkdir -p \"${MVK_OS_PROD_PATH}\"\ncp -a \"${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework\" \"${MVK_OS_PROD_PATH}\"\n\n#-----------------------------------\n# MoltenVKSPIRVToMSLConverter\nexport MVK_PROD_NAME=\"MoltenVKSPIRVToMSLConverter\"\nexport MVK_PKG_CONFIG_PATH=\"${MVK_PKG_LOCN}/${CONFIGURATION}/${MVK_PROD_BASE_NAME}/${MVK_PROD_NAME}\"\n\n# Remove and replace the existing macOS framework folder and copy framework into it\nexport MVK_OS_PROD_PATH=\"${MVK_PKG_CONFIG_PATH}/macOS\"\nexport MVK_BUILT_PROD_PATH=\"${BUILT_PRODUCTS_DIR}\"\nrm -rf \"${MVK_OS_PROD_PATH}\"\nmkdir -p \"${MVK_OS_PROD_PATH}\"\ncp -a \"${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework\" \"${MVK_OS_PROD_PATH}\"\n\n# Remove and replace the existing iOS framework folder and copy framework into it\nexport MVK_OS_PROD_PATH=\"${MVK_PKG_CONFIG_PATH}/iOS\"\nexport MVK_BUILT_PROD_PATH=\"${BUILT_PRODUCTS_DIR}/../${CONFIGURATION}-iphoneos\"\nrm -rf \"${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework/_CodeSignature\"\nrm -rf \"${MVK_OS_PROD_PATH}\"\nmkdir -p \"${MVK_OS_PROD_PATH}\"\ncp -a \"${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework\" \"${MVK_OS_PROD_PATH}\"\n\n#-----------------------------------\n# MoltenVKShaderConverter Tool\nexport MVK_PROD_NAME=\"MoltenVKShaderConverter\"\nexport MVK_PKG_CONFIG_PATH=\"${MVK_PKG_LOCN}/${CONFIGURATION}/${MVK_PROD_BASE_NAME}\"\n\n# Remove and replace the existing macOS framework folder and copy framework into it\nexport MVK_OS_PROD_PATH=\"${MVK_PKG_CONFIG_PATH}/Tools\"\nexport MVK_BUILT_PROD_PATH=\"${BUILT_PRODUCTS_DIR}\"\nrm -rf \"${MVK_OS_PROD_PATH}\"\nmkdir -p \"${MVK_OS_PROD_PATH}\"\ncp -a \"${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}\" \"${MVK_OS_PROD_PATH}\"\n";
-		};
-		A9FEADDB1F3517480010240E /* Update Latest */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			name = "Update Latest";
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "set -e\n\n# Package folder\nexport MVK_WKSPC_LOCN=\"${PROJECT_DIR}\"\nexport MVK_PKG_LOCN=\"${MVK_WKSPC_LOCN}/Package\"\n\n# Configuration package folder location\nexport MVK_PKG_CONFIG_LOCN=\"${CONFIGURATION}\"\nexport MVK_PKG_LATEST_LOCN=\"Latest\"\n\n# Assign symlink from Latest\nln -sfn \"${MVK_PKG_LOCN}/${MVK_PKG_CONFIG_LOCN}\" \"${MVK_PKG_LOCN}/${MVK_PKG_LATEST_LOCN}\"";
+			shellScript = "${SRCROOT}/Scripts/package_all.sh";
 		};
 /* End PBXShellScriptBuildPhase section */
 
 /* Begin PBXTargetDependency section */
+		A975D5792140585200D4834F /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = "MoltenVK-iOS";
+			targetProxy = A975D57A2140585200D4834F /* PBXContainerItemProxy */;
+		};
+		A975D57D2140585200D4834F /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = "MoltenVKSPIRVToMSLConverter-iOS";
+			targetProxy = A975D57E2140585200D4834F /* PBXContainerItemProxy */;
+		};
+		A975D5812140585200D4834F /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = "MoltenVKGLSLToSPIRVConverter-iOS";
+			targetProxy = A975D5822140585200D4834F /* PBXContainerItemProxy */;
+		};
+		A975D58E2140586700D4834F /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = "MoltenVK-macOS";
+			targetProxy = A975D58F2140586700D4834F /* PBXContainerItemProxy */;
+		};
+		A975D5922140586700D4834F /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = "MoltenVKSPIRVToMSLConverter-macOS";
+			targetProxy = A975D5932140586700D4834F /* PBXContainerItemProxy */;
+		};
+		A975D5962140586700D4834F /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = "MoltenVKGLSLToSPIRVConverter-macOS";
+			targetProxy = A975D5972140586700D4834F /* PBXContainerItemProxy */;
+		};
+		A975D5982140586700D4834F /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = MoltenVKShaderConverter;
+			targetProxy = A975D5992140586700D4834F /* PBXContainerItemProxy */;
+		};
 		A98149CB1FB7689D005F00B4 /* PBXTargetDependency */ = {
 			isa = PBXTargetDependency;
 			name = MoltenVKShaderConverter;
@@ -408,10 +528,37 @@
 			};
 			name = Release;
 		};
+		A975D5892140585200D4834F /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		A975D58A2140585200D4834F /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
+		A975D59C2140586700D4834F /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		A975D59D2140586700D4834F /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
 		A9FEADDD1F3517480010240E /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				GCC_PREPROCESSOR_DEFINITIONS = "$(GCC_PREPROCESSOR_DEFINITIONS)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
 			};
 			name = Debug;
@@ -419,7 +566,6 @@
 		A9FEADDE1F3517480010240E /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				GCC_PREPROCESSOR_DEFINITIONS = "$(GCC_PREPROCESSOR_DEFINITIONS)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
 			};
 			name = Release;
@@ -436,6 +582,24 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
+		A975D5882140585200D4834F /* Build configuration list for PBXAggregateTarget "MoltenVK-iOS" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				A975D5892140585200D4834F /* Debug */,
+				A975D58A2140585200D4834F /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		A975D59B2140586700D4834F /* Build configuration list for PBXAggregateTarget "MoltenVK-macOS" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				A975D59C2140586700D4834F /* Debug */,
+				A975D59D2140586700D4834F /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 		A9FEADDC1F3517480010240E /* Build configuration list for PBXAggregateTarget "MoltenVK" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (
diff --git "a/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK \050Debug\051.xcscheme" "b/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050Debug\051.xcscheme"
similarity index 100%
rename from "MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK \050Debug\051.xcscheme"
rename to "MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050Debug\051.xcscheme"
diff --git "a/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK \050Release\051.xcscheme" "b/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050Release\051.xcscheme"
similarity index 100%
rename from "MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK \050Release\051.xcscheme"
rename to "MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050Release\051.xcscheme"
diff --git "a/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050iOS only\051 \050Debug\051.xcscheme" "b/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050iOS only\051 \050Debug\051.xcscheme"
new file mode 100644
index 0000000..eb545a4
--- /dev/null
+++ "b/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050iOS only\051 \050Debug\051.xcscheme"
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0940"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "A975D5782140585200D4834F"
+               BuildableName = "MoltenVK-iOS"
+               BlueprintName = "MoltenVK-iOS"
+               ReferencedContainer = "container:MoltenVKPackaging.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "A975D5782140585200D4834F"
+            BuildableName = "MoltenVK-iOS"
+            BlueprintName = "MoltenVK-iOS"
+            ReferencedContainer = "container:MoltenVKPackaging.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "A975D5782140585200D4834F"
+            BuildableName = "MoltenVK-iOS"
+            BlueprintName = "MoltenVK-iOS"
+            ReferencedContainer = "container:MoltenVKPackaging.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git "a/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050iOS only\051 \050Release\051.xcscheme" "b/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050iOS only\051 \050Release\051.xcscheme"
new file mode 100644
index 0000000..418cdcc
--- /dev/null
+++ "b/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050iOS only\051 \050Release\051.xcscheme"
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0940"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "A975D5782140585200D4834F"
+               BuildableName = "MoltenVK-iOS"
+               BlueprintName = "MoltenVK-iOS"
+               ReferencedContainer = "container:MoltenVKPackaging.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Release"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "A975D5782140585200D4834F"
+            BuildableName = "MoltenVK-iOS"
+            BlueprintName = "MoltenVK-iOS"
+            ReferencedContainer = "container:MoltenVKPackaging.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "A975D5782140585200D4834F"
+            BuildableName = "MoltenVK-iOS"
+            BlueprintName = "MoltenVK-iOS"
+            ReferencedContainer = "container:MoltenVKPackaging.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git "a/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050macOS only\051 \050Debug\051.xcscheme" "b/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050macOS only\051 \050Debug\051.xcscheme"
new file mode 100644
index 0000000..5396b00
--- /dev/null
+++ "b/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050macOS only\051 \050Debug\051.xcscheme"
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0940"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "A975D58B2140586700D4834F"
+               BuildableName = "MoltenVK-macOS"
+               BlueprintName = "MoltenVK-macOS"
+               ReferencedContainer = "container:MoltenVKPackaging.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "A975D58B2140586700D4834F"
+            BuildableName = "MoltenVK-macOS"
+            BlueprintName = "MoltenVK-macOS"
+            ReferencedContainer = "container:MoltenVKPackaging.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "A975D58B2140586700D4834F"
+            BuildableName = "MoltenVK-macOS"
+            BlueprintName = "MoltenVK-macOS"
+            ReferencedContainer = "container:MoltenVKPackaging.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git "a/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050macOS only\051 \050Release\051.xcscheme" "b/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050macOS only\051 \050Release\051.xcscheme"
new file mode 100644
index 0000000..9b180e9
--- /dev/null
+++ "b/MoltenVKPackaging.xcodeproj/xcshareddata/xcschemes/MoltenVK Package \050macOS only\051 \050Release\051.xcscheme"
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0940"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "A975D58B2140586700D4834F"
+               BuildableName = "MoltenVK-macOS"
+               BlueprintName = "MoltenVK-macOS"
+               ReferencedContainer = "container:MoltenVKPackaging.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Release"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "A975D58B2140586700D4834F"
+            BuildableName = "MoltenVK-macOS"
+            BlueprintName = "MoltenVK-macOS"
+            ReferencedContainer = "container:MoltenVKPackaging.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "A975D58B2140586700D4834F"
+            BuildableName = "MoltenVK-macOS"
+            BlueprintName = "MoltenVK-macOS"
+            ReferencedContainer = "container:MoltenVKPackaging.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/Scripts/package_all.sh b/Scripts/package_all.sh
new file mode 100755
index 0000000..82f4b6d
--- /dev/null
+++ b/Scripts/package_all.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+${SRCROOT}/Scripts/package_moltenvk.sh
+${SRCROOT}/Scripts/package_shader_converter.sh
+${SRCROOT}/Scripts/package_docs.sh
+${SRCROOT}/Scripts/update_latest.sh
+
diff --git a/Scripts/package_docs.sh b/Scripts/package_docs.sh
new file mode 100755
index 0000000..2d634d4
--- /dev/null
+++ b/Scripts/package_docs.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+set -e
+
+# Package folder
+export MVK_WKSPC_PATH="${PROJECT_DIR}"
+export MVK_PKG_LOCN="${MVK_WKSPC_PATH}/Package"
+export MVK_PKG_CONFIG_PATH="${MVK_PKG_LOCN}/${CONFIGURATION}"
+
+# Copy the docs. Allow silent fail if a symlinked doc is not built.
+cp -a "${MVK_WKSPC_PATH}/LICENSE" "${MVK_PKG_CONFIG_PATH}"
+cp -pRLf "${MVK_WKSPC_PATH}/Docs" "${MVK_PKG_CONFIG_PATH}" 2> /dev/null || true
diff --git a/Scripts/package_moltenvk.sh b/Scripts/package_moltenvk.sh
new file mode 100755
index 0000000..c22562e
--- /dev/null
+++ b/Scripts/package_moltenvk.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+set -e
+
+# Package folder
+export MVK_PROD_NAME="MoltenVK"
+export MVK_DYLIB_NAME="lib${MVK_PROD_NAME}.dylib"
+export MVK_ICD_NAME="${MVK_PROD_NAME}_icd.json"
+export MVK_WKSPC_PATH="${PROJECT_DIR}"
+export MVK_PROD_PROJ_PATH="${MVK_WKSPC_PATH}/${MVK_PROD_NAME}"
+export MVK_PKG_LOCN="${MVK_WKSPC_PATH}/Package"
+export MVK_PKG_CONFIG_PATH="${MVK_PKG_LOCN}/${CONFIGURATION}"
+export MVK_PKG_PROD_PATH="${MVK_PKG_CONFIG_PATH}/${MVK_PROD_NAME}"
+
+# Remove the product folder
+rm -rf "${MVK_PKG_PROD_PATH}"
+
+# Remove and replace the existing macOS framework folder and copy framework into it
+export MVK_OS_PROD_PATH="${MVK_PKG_PROD_PATH}/macOS"
+export MVK_BUILT_PROD_PATH="${BUILT_PRODUCTS_DIR}"
+rm -rf "${MVK_OS_PROD_PATH}"
+if [ -e "${MVK_BUILT_PROD_PATH}" ]; then
+	mkdir -p "${MVK_OS_PROD_PATH}"
+	cp -a "${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework" "${MVK_OS_PROD_PATH}"
+	cp -a "${MVK_BUILT_PROD_PATH}/${MVK_DYLIB_NAME}" "${MVK_OS_PROD_PATH}"
+	cp -a "${MVK_PROD_PROJ_PATH}/icd/${MVK_ICD_NAME}" "${MVK_OS_PROD_PATH}"
+fi
+
+# Remove and replace the existing iOS framework folder and copy framework into it
+export MVK_OS_PROD_PATH="${MVK_PKG_PROD_PATH}/iOS"
+export MVK_BUILT_PROD_PATH="${BUILT_PRODUCTS_DIR}-iphoneos"
+rm -rf "${MVK_OS_PROD_PATH}"
+echo MVK_BUILT_PROD_PATH = "${MVK_BUILT_PROD_PATH}"
+if [ -e "${MVK_BUILT_PROD_PATH}" ]; then
+	rm -rf "${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework/_CodeSignature"
+	mkdir -p "${MVK_OS_PROD_PATH}"
+	cp -a "${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework" "${MVK_OS_PROD_PATH}"
+	cp -a "${MVK_BUILT_PROD_PATH}/${MVK_DYLIB_NAME}" "${MVK_OS_PROD_PATH}"
+	cp -a "${MVK_PROD_PROJ_PATH}/icd/${MVK_ICD_NAME}" "${MVK_OS_PROD_PATH}"
+fi
+# Remove and replace header include folder
+rm -rf "${MVK_PKG_PROD_PATH}/include"
+cp -pRL "${MVK_PROD_PROJ_PATH}/include" "${MVK_PKG_PROD_PATH}"
diff --git a/Scripts/package_shader_converter.sh b/Scripts/package_shader_converter.sh
new file mode 100755
index 0000000..fc001a4
--- /dev/null
+++ b/Scripts/package_shader_converter.sh
@@ -0,0 +1,73 @@
+#!/bin/bash
+
+set -e
+
+# Package folder
+export MVK_PROD_BASE_NAME="MoltenVKShaderConverter"
+export MVK_WKSPC_PATH="${PROJECT_DIR}"
+export MVK_PKG_LOCN="${MVK_WKSPC_PATH}/Package"
+
+# Remove the base product folder
+rm -rf "${MVK_PKG_LOCN}/${CONFIGURATION}/${MVK_PROD_BASE_NAME}"
+
+#-----------------------------------
+# MoltenVKGLSLToSPIRVConverter
+export MVK_PROD_NAME="MoltenVKGLSLToSPIRVConverter"
+export MVK_PKG_CONFIG_PATH="${MVK_PKG_LOCN}/${CONFIGURATION}/${MVK_PROD_BASE_NAME}/${MVK_PROD_NAME}"
+
+# Remove and replace the existing macOS framework folder and copy framework into it
+export MVK_OS_PROD_PATH="${MVK_PKG_CONFIG_PATH}/macOS"
+export MVK_BUILT_PROD_PATH="${BUILT_PRODUCTS_DIR}"
+rm -rf "${MVK_OS_PROD_PATH}"
+if [ -e "${MVK_BUILT_PROD_PATH}" ]; then
+	mkdir -p "${MVK_OS_PROD_PATH}"
+	cp -a "${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework" "${MVK_OS_PROD_PATH}"
+fi
+
+# Remove and replace the existing iOS framework folder and copy framework into it
+export MVK_OS_PROD_PATH="${MVK_PKG_CONFIG_PATH}/iOS"
+export MVK_BUILT_PROD_PATH="${BUILT_PRODUCTS_DIR}-iphoneos"
+rm -rf "${MVK_OS_PROD_PATH}"
+if [ -e "${MVK_BUILT_PROD_PATH}" ]; then
+	rm -rf "${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework/_CodeSignature"
+	mkdir -p "${MVK_OS_PROD_PATH}"
+	cp -a "${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework" "${MVK_OS_PROD_PATH}"
+fi
+
+#-----------------------------------
+# MoltenVKSPIRVToMSLConverter
+export MVK_PROD_NAME="MoltenVKSPIRVToMSLConverter"
+export MVK_PKG_CONFIG_PATH="${MVK_PKG_LOCN}/${CONFIGURATION}/${MVK_PROD_BASE_NAME}/${MVK_PROD_NAME}"
+
+# Remove and replace the existing macOS framework folder and copy framework into it
+export MVK_OS_PROD_PATH="${MVK_PKG_CONFIG_PATH}/macOS"
+export MVK_BUILT_PROD_PATH="${BUILT_PRODUCTS_DIR}"
+rm -rf "${MVK_OS_PROD_PATH}"
+if [ -e "${MVK_BUILT_PROD_PATH}" ]; then
+	mkdir -p "${MVK_OS_PROD_PATH}"
+	cp -a "${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework" "${MVK_OS_PROD_PATH}"
+fi
+
+# Remove and replace the existing iOS framework folder and copy framework into it
+export MVK_OS_PROD_PATH="${MVK_PKG_CONFIG_PATH}/iOS"
+export MVK_BUILT_PROD_PATH="${BUILT_PRODUCTS_DIR}-iphoneos"
+rm -rf "${MVK_OS_PROD_PATH}"
+if [ -e "${MVK_BUILT_PROD_PATH}" ]; then
+	rm -rf "${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework/_CodeSignature"
+	mkdir -p "${MVK_OS_PROD_PATH}"
+	cp -a "${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}.framework" "${MVK_OS_PROD_PATH}"
+fi
+
+#-----------------------------------
+# MoltenVKShaderConverter Tool
+export MVK_PROD_NAME="MoltenVKShaderConverter"
+export MVK_PKG_CONFIG_PATH="${MVK_PKG_LOCN}/${CONFIGURATION}/${MVK_PROD_BASE_NAME}"
+
+# Remove and replace the existing macOS framework folder and copy framework into it
+export MVK_OS_PROD_PATH="${MVK_PKG_CONFIG_PATH}/Tools"
+export MVK_BUILT_PROD_PATH="${BUILT_PRODUCTS_DIR}"
+rm -rf "${MVK_OS_PROD_PATH}"
+if [ -e "${MVK_BUILT_PROD_PATH}" ]; then
+	mkdir -p "${MVK_OS_PROD_PATH}"
+	cp -a "${MVK_BUILT_PROD_PATH}/${MVK_PROD_NAME}" "${MVK_OS_PROD_PATH}"
+fi
diff --git a/Scripts/update_latest.sh b/Scripts/update_latest.sh
new file mode 100755
index 0000000..8abc75c
--- /dev/null
+++ b/Scripts/update_latest.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+set -e
+
+# Package folder
+export MVK_WKSPC_LOCN="${PROJECT_DIR}"
+export MVK_PKG_LOCN="${MVK_WKSPC_LOCN}/Package"
+
+# Configuration package folder location
+export MVK_PKG_CONFIG_LOCN="${CONFIGURATION}"
+export MVK_PKG_LATEST_LOCN="Latest"
+
+# Assign symlink from Latest
+ln -sfn "${MVK_PKG_LOCN}/${MVK_PKG_CONFIG_LOCN}" "${MVK_PKG_LOCN}/${MVK_PKG_LATEST_LOCN}"