MovieMapper/create-xcode-project.py
Jarian Cottingham 68eb4d9f43 feat: Add Rust UI and backend implementation with project infrastructure
Adds the new Rust-based UI (iced), backend service, shared Swift models,
CI/CD workflows, build scripts, and project documentation.
2026-08-19 21:22:08 -05:00

85 lines
4.8 KiB
Python

#!/usr/bin/env python3
"""
Create Xcode project structure for MovieMapper-iOS
"""
import os
import xml.etree.ElementTree as ET
from xml.dom import minidom
PROJECT_NAME = "MovieMapper-iOS"
PACKAGE_NAME = "MovieMapper-iOS"
ORGANIZATION = "com.moviemapper"
IOS_VERSION = "17.0"
def create_project_structure():
"""Create the Xcode project directory structure"""
base = f"/Users/user/Projects/MovieMapper/{PROJECT_NAME}"
# Project directory
project_dir = os.path.join(base, f"{PROJECT_NAME}.xcodeproj")
os.makedirs(project_dir, exist_ok=True)
# Project.pbxproj
pbxproj_path = os.path.join(project_dir, "project.pbxproj")
# Create project file content
content = """<?xml version="1.0" encoding="UTF-8"?>
<Document type="com.apple.InterfaceBuilder4.CocoaTouch.XIB" version="4.0" toolsVersion="23085" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="iPad9thGeneration" orientation="portrait" layout="fullscreen" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
<capability name="Safe layout from top level containers" minToolsVersion="5.1"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="ib-files-owner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="ib-responder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epH">
<rect key="frame" x="0.0" y="0.0" width="1024" height="1366"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="MovieMapper-iOS" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="814-3m-7vK">
<rect key="frame" x="0.0" y="673" width="1024" height="20.333333333333343"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" systemColor="label"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="iPad" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="114-7u-6qY">
<rect key="frame" x="0.0" y="1346" width="1024" height="20.333333333333343"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" systemColor="label"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="814-3m-7vK" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="4dD-9q-6pT"/>
<constraint firstItem="114-7u-6qY" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="8jX-7T-5qK"/>
<constraint firstItem="814-3m-7vK" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" constant="653" id="9pM-0r-6cT"/>
<constraint firstItem="114-7u-6qY" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" constant="1326" id="zXJ-5q-7qL"/>
</constraints>
<nil key="simulatedStatusBarMetrics"/>
<nil key="simulatedTopBarMetrics"/>
<nil key="simulatedBottomBarMetrics"/>
<nil key="simulatedSizeMetrics"/>
<point key="canvasLocation" x="139" y="154"/>
</view>
</objects>
</Document>
"""
with open(pbxproj_path, 'w') as f:
f.write(content)
print(f"Created Xcode project structure at: {project_dir}")
print("Note: This is a minimal project structure. For full functionality:")
print(" 1. Open in Xcode: open MovieMapper-iOS.xcodeproj")
print(" 2. Add all Swift files from Sources/")
print(" 3. Configure Signing & Capabilities")
print(" 4. Set deployment target to iOS 17.0+")
if __name__ == "__main__":
create_project_structure()