Building iOS Image Optimizer: CLI Tool for Optimizing Images in iOS Apps
iOS Image Optimizer: Apple-Compliant Image Analysis Tool
iOS apps often accumulate unused images and oversized assets over time, leading to bloated app bundles and App Store rejection. I created iOS Image Optimizer, a comprehensive command-line tool that analyzes iOS projects for image optimization opportunities following Apple’s official Human Interface Guidelines.
The Problem
iOS projects face multiple image-related challenges that impact app performance and App Store approval:
- Bundle bloat from unused images and oversized assets
- App Store rejections due to non-compliance with Apple’s image guidelines
- Performance issues from interlaced PNGs and missing color profiles
- Inconsistent user experience across different iOS devices
- Manual review overhead for complex project structures
Existing solutions only addressed basic unused image detection, leaving developers to manually verify Apple compliance.
What It Does
Comprehensive Image Analysis
- Enhanced Unused Image Detection - Find images that exist but are never referenced in code, including advanced dynamic loading patterns and string interpolation
- Apple Compliance Validation - Validate images against Apple’s official guidelines
- PNG Interlacing Analysis - Detect performance-impacting interlaced PNGs
- Color Profile Validation - Ensure consistent colors across devices
- Asset Catalog Organization - Validate proper scale variants (@1x, @2x, @3x)
- Design Quality Assessment - Check touch targets and memory optimization
Quality Assurance & Reliability
- 154 Comprehensive Unit Tests - Ensuring reliability and accuracy with 73.8% code coverage
- CI/CD Pipeline - Automated testing on every Pull Request
- Cross-Platform Support - Works on both Intel and Apple Silicon Macs
- Robust Error Handling - Better handling of edge cases and malformed files
Advanced Usage Detection
- Swift:
UIImage(named:),Image("name"), SF Symbols - Objective-C:
[UIImage imageNamed:]patterns - Interface Builder: Storyboards and XIB files
- Asset Catalog cross-referencing
- Method 2 Enhanced Detection: Advanced pattern matching for dynamic loading (
Image("Icons/\(variable)")) and string interpolation
Apple Compliance Scoring
- 0-100 compliance score based on Apple’s Human Interface Guidelines
- Prioritized recommendations ranked by importance
- Actionable insights for App Store approval
Comprehensive Reporting
- Color-coded terminal output with compliance scores
- Detailed analysis by validation category
- JSON export for CI/CD integration
- Performance impact assessment
- Automated Testing Integration - 154 unit tests ensure consistent and reliable results
Sample Output
🔍 Analyzing iOS project at: /Users/yourname/Documents/MyApp
📊 Analysis Complete
==================================================
🎯 Apple Compliance Score: 73/100
📈 Summary:
Total images: 45
Total image size: 2.3 MB
Unused images: 8
Potential savings: 890 KB
🍎 Apple Guidelines Compliance:
PNG interlacing issues: 2
Color profile issues: 5
Asset catalog issues: 12
Design quality issues: 3
💡 Prioritized Action Items:
1. Remove 8 unused images to save 890 KB
2. Fix 2 critical PNG interlacing issues
3. Add color profiles to 5 images
4. Add missing scale variants for 7 images
5. Address 2 design quality issues
Technical Implementation
Swift Package Architecture
let package = Package(
name: "iOSImageOptimizer",
platforms: [.macOS(.v13)],
dependencies: [
.package(url: "https://github.com/apple/swift-argument-parser", from: "1.3.0"),
.package(url: "https://github.com/JohnSundell/Files", from: "4.0.0"),
.package(url: "https://github.com/onevcat/Rainbow", from: "4.0.0")
]
)
Apple Compliance Validator
The core innovation is the comprehensive validation system that checks images against Apple’s guidelines:
class AppleComplianceValidator {
func validateImages(_ images: [ImageAsset]) -> AppleComplianceResults {
let pngInterlacingIssues = validatePNGInterlacing(images)
let colorProfileIssues = validateColorProfiles(images)
let assetCatalogIssues = validateAssetCatalogOrganization(images)
let designQualityIssues = validateDesignQuality(images)
let complianceScore = calculateComplianceScore(
totalImages: images.count,
totalIssues: totalIssues,
criticalIssues: criticalIssues
)
return AppleComplianceResults(
pngInterlacingIssues: pngInterlacingIssues,
colorProfileIssues: colorProfileIssues,
assetCatalogIssues: assetCatalogIssues,
designQualityIssues: designQualityIssues,
complianceScore: complianceScore,
criticalIssues: criticalIssues,
warningIssues: warningIssues,
totalIssues: totalIssues
)
}
}
PNG Interlacing Detection
Critical for iOS performance, as interlaced PNGs cause memory issues:
func validatePNGInterlacing(_ images: [ImageAsset]) -> [PNGInterlacingIssue] {
var issues: [PNGInterlacingIssue] = []
for image in images where image.type == .png {
guard let isInterlaced = image.isInterlaced, isInterlaced else { continue }
let performanceImpact = determinePerformanceImpact(for: image)
issues.append(PNGInterlacingIssue(
image: image,
performanceImpact: performanceImpact,
recommendation: "Convert to de-interlaced PNG for better iOS performance"
))
}
return issues
}
Color Profile Validation
Ensures consistent colors across iOS devices:
func validateColorProfiles(_ images: [ImageAsset]) -> [ColorProfileIssue] {
var issues: [ColorProfileIssue] = []
for image in images {
if let colorProfile = image.colorProfile {
if !isRecommendedColorProfile(colorProfile) {
let recommended = getRecommendedColorProfile(for: image)
issues.append(ColorProfileIssue(
image: image,
issueType: .incompatible(current: colorProfile, recommended: recommended),
recommendation: "Use \(recommended) color profile for better iOS compatibility"
))
}
} else {
issues.append(ColorProfileIssue(
image: image,
issueType: .missing,
recommendation: "Add sRGB color profile for consistent colors across devices"
))
}
}
return issues
}
Key Challenges Solved
- Apple Guidelines Implementation - Translated Apple’s Human Interface Guidelines into automated validation rules
- Complex image metadata analysis - PNG interlacing detection, color profile extraction, and dimension validation
- Comprehensive compliance scoring - Weighted scoring system balancing critical vs. warning issues
- Multi-category validation - Simultaneous analysis across PNG performance, color consistency, asset organization, and design quality
- Actionable prioritization - Ranking recommendations by potential impact on App Store approval and user experience
Architecture Highlights
Modular validation system:
AppleComplianceValidator: Core validation engine with weighted scoringImageScanner: File discovery and metadata extractionUsageDetector: Code analysis and pattern matchingProjectAnalyzer: Orchestration and comprehensive analysisAnalysisReport: Multi-format output with prioritized recommendations
Validation Categories:
PNGInterlacingIssue: Performance impact analysisColorProfileIssue: Device consistency validationAssetCatalogIssue: Organization and scale variant checkingDesignQualityIssue: Touch targets and memory optimization
Apple Guidelines Reference
The tool implements validation based on Apple’s official Human Interface Guidelines:
- Primary Reference: Apple Human Interface Guidelines - Images
- PNG Performance: De-interlaced PNGs for better iOS performance and memory usage
- Color Consistency: sRGB/Display P3 color profiles for consistent appearance across devices
- Scale Factors: Proper @1x, @2x, @3x variants for different device densities
- Format Guidelines: PNG for UI elements, JPEG for photos, PDF/SVG for scalable icons
- Design Quality: 44×44pt minimum touch targets, optimized dimensions for memory efficiency
Try It Yourself
Clone and Build:
git clone https://github.com/sahilsatralkar/iOSImageOptimizerTool.git
cd iOSImageOptimizerTool/iOSImageOptimizer
swift build
Run Analysis:
# Basic analysis with Apple compliance scoring
swift run iOSImageOptimizer /path/to/your/ios/project
# Detailed analysis with verbose output
swift run iOSImageOptimizer /path/to/your/ios/project --verbose
# JSON export for CI/CD integration
swift run iOSImageOptimizer /path/to/your/ios/project --json
Understanding Results:
- 80-100 compliance score: Excellent, ready for App Store
- 60-79: Good, minor issues to address
- 40-59: Fair, several compliance issues
- 0-39: Poor, significant issues requiring attention
GitHub Repository: iOS Image Optimizer Tool
Latest v0.2 Release Highlights
The tool has been significantly enhanced with production-ready features:
- Complete Test Suite: 154 comprehensive unit tests with 73.8% code coverage ensuring reliability
- CI/CD Pipeline: Automated testing on GitHub Actions for consistent quality
- Enhanced Detection: Improved dynamic image loading detection with Method 2 pattern matching
- Cross-Platform: Full support for both Intel and Apple Silicon Macs
- Robust Error Handling: Better handling of edge cases and malformed project files
These improvements make the tool more reliable for production use and CI/CD integration.
The project follows Apple’s official guidelines and provides actionable insights for App Store approval. Open source contributions welcome for expanding validation rules and improving accuracy.
iOS Image Optimizer has evolved from basic unused image detection to comprehensive Apple compliance validation. This represents a significant step toward automated iOS app quality assurance and App Store readiness.