From 2c30e7b863a64d48091179a0d4e4aeabdeb3d935 Mon Sep 17 00:00:00 2001 From: John Galvin <96908304+Johnnyg63@users.noreply.github.com> Date: Tue, 15 Sep 2026 09:58:37 +0100 Subject: [PATCH 1/2] Issue293 Added Single Header project to xcode project file --- .../olcPGE3.xcodeproj/project.pbxproj | 152 +++++++++++++++++- .../xcschemes/olcPGE3_SH.xcscheme | 79 +++++++++ 2 files changed, 230 insertions(+), 1 deletion(-) create mode 100644 dev/xcode_macos/olcPGE3.xcodeproj/xcshareddata/xcschemes/olcPGE3_SH.xcscheme diff --git a/dev/xcode_macos/olcPGE3.xcodeproj/project.pbxproj b/dev/xcode_macos/olcPGE3.xcodeproj/project.pbxproj index f8fd6154..f0bbb815 100644 --- a/dev/xcode_macos/olcPGE3.xcodeproj/project.pbxproj +++ b/dev/xcode_macos/olcPGE3.xcodeproj/project.pbxproj @@ -3,11 +3,18 @@ archiveVersion = 1; classes = { }; - objectVersion = 56; + objectVersion = 70; objects = { /* Begin PBXBuildFile section */ 460496082E362F190047E223 /* test_mh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 460495FB2E300E0F0047E223 /* test_mh.cpp */; }; + 4610525930593E6D00C2BC3A /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46E85DF82E39135B00B74FA3 /* OpenGL.framework */; }; + 4610525A30593E6D00C2BC3A /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46B1E5942E40F8B0009734EC /* MetalKit.framework */; }; + 4610525B30593E6D00C2BC3A /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46B1E5922E40F8A6009734EC /* AppKit.framework */; }; + 4610525C30593E6D00C2BC3A /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46E85DFC2E39137100B74FA3 /* Metal.framework */; }; + 4610525D30593E6D00C2BC3A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46E85DFA2E39136800B74FA3 /* QuartzCore.framework */; }; + 4610525E30593E6D00C2BC3A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46E85DF62E39135300B74FA3 /* Foundation.framework */; }; + 4610526630593EE400C2BC3A /* assets in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4610526530593EE400C2BC3A /* assets */; }; 46152BD72FE2DD1E00DCAC34 /* hw_touch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 46152BD62FE2DD1E00DCAC34 /* hw_touch.cpp */; }; 462680A42E69D03800799C36 /* image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 460495EC2E300E000047E223 /* image.cpp */; }; 462680A52E69D15C00799C36 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46E85DF82E39135B00B74FA3 /* OpenGL.framework */; }; @@ -32,6 +39,16 @@ /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ + 4610525F30593E6D00C2BC3A /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 7; + files = ( + 4610526630593EE400C2BC3A /* assets in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8998CE1E2E057F4E007DDD96 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -67,6 +84,9 @@ 460495F12E300E000047E223 /* window.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = window.h; sourceTree = ""; }; 460495F22E300E000047E223 /* window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = window.cpp; sourceTree = ""; }; 460495FB2E300E0F0047E223 /* test_mh.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = test_mh.cpp; sourceTree = ""; }; + 4610522030593E6300C2BC3A /* olcPixelGameEngine3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = olcPixelGameEngine3.h; path = /Users/mickymacm4/Documents/olcPixelGameEngine3_Issue293/olcPixelGameEngine3.h; sourceTree = ""; }; + 4610526330593E6D00C2BC3A /* olcPGE3_SH */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = olcPGE3_SH; sourceTree = BUILT_PRODUCTS_DIR; }; + 4610526530593EE400C2BC3A /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = assets; path = ../../examples/assets; sourceTree = ""; }; 46152BD52FE2DD1E00DCAC34 /* hw_touch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hw_touch.h; sourceTree = ""; }; 46152BD62FE2DD1E00DCAC34 /* hw_touch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = hw_touch.cpp; sourceTree = ""; }; 462680D02E6C3C4500799C36 /* gpu_iface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gpu_iface.cpp; sourceTree = ""; }; @@ -103,7 +123,64 @@ 8998CE372E057F92007DDD96 /* transform2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = transform2d.h; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 4610526430593E6D00C2BC3A /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + olcPGE3_AntiAliasing.cpp, + olcPGE3_BatchesOfFills.cpp, + olcPGE3_BatchesOfLines.cpp, + olcPGE3_BlendingModes.cpp, + olcPGE3_Camera2D_Tiles.cpp, + olcPGE3_CirclesEllipses.cpp, + olcPGE3_Extensions.cpp, + olcPGE3_Fish.cpp, + olcPGE3_FrameGraph.cpp, + "olcPGE3_ImageQuads-FromMemory.cpp", + olcPGE3_ImageQuads.cpp, + olcPGE3_ImageRect.cpp, + olcPGE3_ImageRegion.cpp, + olcPGE3_ImageScaleRotate.cpp, + olcPGE3_ImageTiling.cpp, + olcPGE3_Keyboard.cpp, + olcPGE3_Lines.cpp, + olcPGE3_LocalTransforms.cpp, + olcPGE3_Mouse.cpp, + olcPGE3_Pixels.cpp, + olcPGE3_PixelShaders.cpp, + olcPGE3_Polygons.cpp, + olcPGE3_Rectangles.cpp, + olcPGE3_Shockwave.cpp, + olcPGE3_SimplePixelShaders.cpp, + olcPGE3_TextBasics.cpp, + olcPGE3_TextFontMap.cpp, + olcPGE3_Touch.cpp, + olcPGE3_WorldTransform.cpp, + ); + target = 4610524630593E6D00C2BC3A /* olcPGE3_SH */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 4610521930593E6300C2BC3A /* examples */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (4610526430593E6D00C2BC3A /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); name = examples; path = /Users/mickymacm4/Documents/olcPixelGameEngine3_Issue293/examples; sourceTree = ""; }; + 4610521F30593E6300C2BC3A /* extensions */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); name = extensions; path = /Users/mickymacm4/Documents/olcPixelGameEngine3_Issue293/extensions; sourceTree = ""; }; + 4610522730593E6300C2BC3A /* utilities */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); name = utilities; path = /Users/mickymacm4/Documents/olcPixelGameEngine3_Issue293/utilities; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ + 4610525830593E6D00C2BC3A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4610525930593E6D00C2BC3A /* OpenGL.framework in Frameworks */, + 4610525A30593E6D00C2BC3A /* MetalKit.framework in Frameworks */, + 4610525B30593E6D00C2BC3A /* AppKit.framework in Frameworks */, + 4610525C30593E6D00C2BC3A /* Metal.framework in Frameworks */, + 4610525D30593E6D00C2BC3A /* QuartzCore.framework in Frameworks */, + 4610525E30593E6D00C2BC3A /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8998CE1D2E057F4E007DDD96 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -136,6 +213,11 @@ 8998CE172E057F4E007DDD96 = { isa = PBXGroup; children = ( + 4610526530593EE400C2BC3A /* assets */, + 4610521930593E6300C2BC3A /* examples */, + 4610521F30593E6300C2BC3A /* extensions */, + 4610522030593E6300C2BC3A /* olcPixelGameEngine3.h */, + 4610522730593E6300C2BC3A /* utilities */, 8998CE322E057F92007DDD96 /* src */, 8998CE2A2E057F85007DDD96 /* tests */, 46E85DF52E39135300B74FA3 /* Frameworks */, @@ -147,6 +229,7 @@ isa = PBXGroup; children = ( 8998CE202E057F4E007DDD96 /* olcPGE3 */, + 4610526330593E6D00C2BC3A /* olcPGE3_SH */, ); name = Products; sourceTree = ""; @@ -220,6 +303,28 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 4610524630593E6D00C2BC3A /* olcPGE3_SH */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4610526030593E6D00C2BC3A /* Build configuration list for PBXNativeTarget "olcPGE3_SH" */; + buildPhases = ( + 4610524730593E6D00C2BC3A /* Sources */, + 4610525830593E6D00C2BC3A /* Frameworks */, + 4610525F30593E6D00C2BC3A /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 4610521930593E6300C2BC3A /* examples */, + 4610521F30593E6300C2BC3A /* extensions */, + 4610522730593E6300C2BC3A /* utilities */, + ); + name = olcPGE3_SH; + productName = olcPGE3; + productReference = 4610526330593E6D00C2BC3A /* olcPGE3_SH */; + productType = "com.apple.product-type.tool"; + }; 8998CE1F2E057F4E007DDD96 /* olcPGE3 */ = { isa = PBXNativeTarget; buildConfigurationList = 8998CE272E057F4E007DDD96 /* Build configuration list for PBXNativeTarget "olcPGE3" */; @@ -232,6 +337,11 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + 4610521930593E6300C2BC3A /* examples */, + 4610521F30593E6300C2BC3A /* extensions */, + 4610522730593E6300C2BC3A /* utilities */, + ); name = olcPGE3; productName = olcPGE3; productReference = 8998CE202E057F4E007DDD96 /* olcPGE3 */; @@ -265,11 +375,19 @@ projectRoot = ""; targets = ( 8998CE1F2E057F4E007DDD96 /* olcPGE3 */, + 4610524630593E6D00C2BC3A /* olcPGE3_SH */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ + 4610524730593E6D00C2BC3A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8998CE1C2E057F4E007DDD96 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -296,6 +414,29 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ + 4610526130593E6D00C2BC3A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; + ENABLE_HARDENED_RUNTIME = YES; + HEADER_SEARCH_PATHS = "$[PROJECT_DIR]/"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 4610526230593E6D00C2BC3A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; + ENABLE_HARDENED_RUNTIME = YES; + HEADER_SEARCH_PATHS = "$[PROJECT_DIR]/"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; 8998CE252E057F4E007DDD96 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -430,6 +571,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 4610526030593E6D00C2BC3A /* Build configuration list for PBXNativeTarget "olcPGE3_SH" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4610526130593E6D00C2BC3A /* Debug */, + 4610526230593E6D00C2BC3A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 8998CE1B2E057F4E007DDD96 /* Build configuration list for PBXProject "olcPGE3" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/dev/xcode_macos/olcPGE3.xcodeproj/xcshareddata/xcschemes/olcPGE3_SH.xcscheme b/dev/xcode_macos/olcPGE3.xcodeproj/xcshareddata/xcschemes/olcPGE3_SH.xcscheme new file mode 100644 index 00000000..3952f1de --- /dev/null +++ b/dev/xcode_macos/olcPGE3.xcodeproj/xcshareddata/xcschemes/olcPGE3_SH.xcscheme @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 0edfc5d15b619af5af1c0060eeafa7fab183e11d Mon Sep 17 00:00:00 2001 From: John Galvin <96908304+Johnnyg63@users.noreply.github.com> Date: Tue, 15 Sep 2026 11:37:52 +0100 Subject: [PATCH 2/2] Enhance README with detailed XCode setup instructions Expanded instructions for cloning and setting up the XCode project, including detailed steps and images. --- dev/xcode_macos/README.md | 41 +++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/dev/xcode_macos/README.md b/dev/xcode_macos/README.md index 8e61d3bc..163f22c6 100644 --- a/dev/xcode_macos/README.md +++ b/dev/xcode_macos/README.md @@ -7,14 +7,47 @@
    -
  • Launch XCode and select **Clone and existing project**
  • -
  • Enter the repo git link and click **Clone**
  • -
  • Once the project is cloned, XCode will automatically detect the olcPGE3.xcodeproj folder and load the solution for you
  • -
  • Finally althought the olcPGE3.xcodeproj is displayed as a folder in GitHub, XCode will detected and display it as an XCode project
  • +
  • + 1:Naviage to https://github.com/OneLoneCoder/olcPixelGameEngine3
    + 2: Select the Main branch
    + 3: Click the green Code button dropdown
    + 4: Click the Copy button to copy the git url
    + image
    +
  • +
  • + Launch XCode and select Clone Git Repository...
    + image
    +
  • +
  • + 1 :Enter the repo git link and click Clone
    + image
    + 2: At the branch prompt select main
    + 3: At the folder prompt select defaults
    +
  • +
  • + Open the xcode-macos folder and double click olcPGE3.xcodeproj
    + image
    + Wait for the project to load
    +
  • +
  • + 1: Select Project Filter
    + 2: Select Project, +
    - olcPGE is a Multi-header file, builds all headers in the **src** directory +
    - olcPGE_SH is a Single-header file (released version), builds the selected example in the examples directory using olcPixelGameEngine3.h + image
    + 3: Press play and watch the magic happen
    +
  • +
  • +
    + **IMPORTANT**
    This Xcode project is setup using all the defaults of xcode, therefore the debug/release folders are held within the xcode **Derived Data** folder, hence why the project is setup to auto copy the **assets** folder to the debug/release output.
    + If you use a different setup, please edit the xcode project settings to suit +
    +

+

    Some simple rules:
  • The olcPGE3.xcodeproj folder and files are all auto generated
  • The olcPGE3.xcodeproj folder and files should never be editied outside of XCode itself