diff --git a/Xcode/StepMania.entitlements b/Xcode/StepMania.entitlements
new file mode 100644
index 0000000000..a98af77462
--- /dev/null
+++ b/Xcode/StepMania.entitlements
@@ -0,0 +1,14 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.device.usb
+
+ com.apple.security.network.client
+
+ com.apple.security.network.server
+
+
+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index aadde32fd7..9d4a374112 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -251,6 +251,25 @@ elseif(APPLE)
"NO"
XCODE_ATTRIBUTE_LIBRARY_SEARCH_PATHS
"${SM_XCODE_DIR}/Libraries")
+ # XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS
+ # "${SM_XCODE_DIR}/StepMania.entitlements")
+
+ set(APPLE_BUNDLE_RESOURCES
+ "${SM_ROOT_DIR}/Announcers"
+ "${SM_ROOT_DIR}/BackgroundEffects"
+ "${SM_ROOT_DIR}/BackgroundTransitions"
+ "${SM_ROOT_DIR}/BGAnimations"
+ "${SM_ROOT_DIR}/Characters"
+ "${SM_ROOT_DIR}/Courses"
+ "${SM_ROOT_DIR}/Data"
+ "${SM_ROOT_DIR}/NoteSkins"
+ "${SM_ROOT_DIR}/Scripts"
+ "${SM_ROOT_DIR}/Songs"
+ "${SM_ROOT_DIR}/Themes"
+ )
+
+ target_sources("${SM_EXE_NAME}" PUBLIC ${APPLE_BUNDLE_RESOURCES})
+ set_source_files_properties(${APPLE_BUNDLE_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
sm_add_compile_definition("${SM_EXE_NAME}" _XOPEN_SOURCE)
diff --git a/src/arch/ArchHooks/ArchHooks_MacOSX.mm b/src/arch/ArchHooks/ArchHooks_MacOSX.mm
index def9a1b7a5..f5c546b1d9 100644
--- a/src/arch/ArchHooks/ArchHooks_MacOSX.mm
+++ b/src/arch/ArchHooks/ArchHooks_MacOSX.mm
@@ -360,6 +360,25 @@ void ArchHooks::MountUserFilesystems( const RString &sDirOfExecutable )
// /Logs -> ~/Library/Logs/PRODUCT_ID
PathForFolderType( dir, kDomainLibraryFolderType );
FILEMAN->Mount( "dir", ssprintf("%s/Logs/" PRODUCT_ID, dir), "/Logs" );
+
+ NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
+ if( resourcePath )
+ {
+ const char* resourcePathUTF8String = [resourcePath UTF8String];
+ FILEMAN->Mount( "dir", ssprintf("%s/Announcers", resourcePathUTF8String), "/Announcers" );
+ FILEMAN->Mount( "dir", ssprintf("%s/BGAnimations", resourcePathUTF8String), "/BGAnimations" );
+ FILEMAN->Mount( "dir", ssprintf("%s/BackgroundEffects", resourcePathUTF8String), "/BackgroundEffects" );
+ FILEMAN->Mount( "dir", ssprintf("%s/BackgroundTransitions", resourcePathUTF8String), "/BackgroundTransitions" );
+ FILEMAN->Mount( "dir", ssprintf("%s/CDTitles", resourcePathUTF8String), "/CDTitles" );
+ FILEMAN->Mount( "dir", ssprintf("%s/Characters", resourcePathUTF8String), "/Characters" );
+ FILEMAN->Mount( "dir", ssprintf("%s/Courses", resourcePathUTF8String), "/Courses" );
+ FILEMAN->Mount( "dir", ssprintf("%s/NoteSkins", resourcePathUTF8String), "/NoteSkins" );
+ FILEMAN->Mount( "dir", ssprintf("%s/Packages", resourcePathUTF8String), "/" + SpecialFiles::USER_PACKAGES_DIR );
+ FILEMAN->Mount( "dir", ssprintf("%s/Songs", resourcePathUTF8String), "/Songs" );
+ FILEMAN->Mount( "dir", ssprintf("%s/RandomMovies", resourcePathUTF8String), "/RandomMovies" );
+ FILEMAN->Mount( "dir", ssprintf("%s/Themes", resourcePathUTF8String), "/Themes" );
+ FILEMAN->Mount( "dir", ssprintf("%s/Data", resourcePathUTF8String), "/Data" );
+ }
// /Desktop -> /Users//Desktop/PRODUCT_ID
// PathForFolderType( dir, kDesktopFolderType );