This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This repository contains Smart Mobile Factory's common project setup files for iOS development. It provides reusable components, scripts, and configurations that are shared across multiple iOS projects and frameworks through git submodules.
The repository is organized into several functional directories:
- LifetimeTracker/: Memory leak detection helpers with base view controllers (wraps https://github.com/krzysztofzablocki/LifetimeTracker)
- SwiftLint/: SwiftLint v0.59.1 configurations and execution scripts with portable binary
- Xcode/: Xcode version checking utilities
- Plist2swift/: Swift Package Manager tool that generates Swift code from plist files
- Git/: Git merge drivers and upmerge scripts for framework development
- Strato/: License management utilities
# For apps
"${SRCROOT}/Submodules/SMF-iOS-CommonProjectSetupFiles/setup-common-project-files.sh" --targettype "${PRODUCT_TYPE}"
# For SwiftUI apps
"${SRCROOT}/Submodules/SMF-iOS-CommonProjectSetupFiles/setup-common-project-files.sh" --targettype "${PRODUCT_TYPE}" --SwiftUI
# For framework unit tests
"${SRCROOT}/Submodules/SMF-iOS-CommonProjectSetupFiles/setup-common-project-files.sh" --targettype "com.apple.product-type.framework"# SwiftLint only
./SwiftLint/copy-and-run-swiftlint-config.sh
# Xcode version check
./Xcode/check-xcode-version.swift
# Plist2Swift code generation
./Plist2swift/Plist2swift -e EnumName -o output.swift input1.plist input2.plistcd Plist2swift
swift testThe main setup script handles:
- Copying and merging SwiftLint configurations (
.swiftlint.ymland.project-swiftlint.yml) - Running SwiftLint with portable binary or system installation
- Copying GitHub PR templates based on project type
- Optional Xcode version validation
- swiftlint.yml: Base SwiftLint v0.59.1 configuration
- swiftlint+frameworks.yml: Additional rules for frameworks
- swiftlint+swiftUI.yml: SwiftUI-specific rules
- project-swiftlint.yml: Template for project-specific excluded paths
The LifetimeTracker SDK helper follows this pattern:
- Provides base view controllers that integrate with LifetimeTracker when available
- Uses conditional compilation (
#if canImport(LifetimeTracker)) to support projects with or without the dependency - Offers simple setup methods with sensible defaults
- Handles debug vs release build configurations
.swiftlint.ymlis automatically copied to project root- Add this file to
.gitignoreas it is generated - Project-specific configurations use
.project-swiftlint.ymltemplate
For framework projects:
- Unit test targets get separate SwiftLint configuration
- Special PR templates are used for breaking changes
- Git merge drivers help with version management during upmerges