Claude
Skills
Sign in
Back

ios

Included with Lifetime
$97 forever

iOS root: SDK, app lifecycle scene-based, permissions NSUsageDescription, HIG guidelines

Backend & APIsiosapplesdk

What this skill does


# ios

## Purpose
This skill handles core iOS development tasks using Apple's SDK, focusing on app lifecycle management (scene-based), permissions via NSUsageDescription in Info.plist, and adherence to Human Interface Guidelines (HIG) for UI/UX consistency.

## When to Use
- Building native iOS apps with Swift or Objective-C.
- Managing app states in scene-based architectures (e.g., iOS 13+).
- Requesting user permissions like camera or location.
- Ensuring apps follow HIG for accessibility and design standards.
- Integrating iOS-specific features in cross-platform projects.

## Key Capabilities
- Access iOS SDK components like UIKit and SwiftUI for UI building.
- Handle scene-based lifecycle events (e.g., sceneDidBecomeActive).
- Manage permissions by adding keys to Info.plist (e.g., NSCameraUsageDescription).
- Enforce HIG through practices like adaptive layouts and voiceover support.
- Support for Xcode tools and Apple ecosystem integration.

## Usage Patterns
- Start by setting up an Xcode project: Use `xcodegen` or create via Xcode UI, then add dependencies via Swift Package Manager.
- For app lifecycle, implement UISceneDelegate methods in your scene manifest.
- To handle permissions, edit Info.plist directly or via Xcode's property list editor, adding strings for each usage description.
- Follow HIG by using Auto Layout constraints and testing with Accessibility Inspector.
- Test apps on simulators or devices using Xcode's build scheme: Select device, then run `xcodebuild -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 14' build`.

## Common Commands/API
- **CLI Commands**: Use `xcodebuild` for building: `xcodebuild -workspace MyApp.xcworkspace -scheme MyApp clean build`. For archiving: `xcodebuild -scheme MyApp -configuration Release archive`.
- **API Endpoints**: Not applicable for direct endpoints; use iOS APIs like `AVCaptureDevice.requestAccess(for: .video)` for camera permission.
- **Code Snippets**:
  - Request camera permission:
    ```
    import AVFoundation
    AVCaptureDevice.requestAccess(for: .video) { granted in
        if granted { print("Access granted") } else { print("Denied") }
    }
    ```
  - Handle scene lifecycle in SceneDelegate.swift:
    ```
    func sceneDidBecomeActive(_ scene: UIScene) {
        // Resume tasks, e.g., start timers
    }
    func sceneWillResignActive(_ scene: UIScene) {
        // Pause tasks
    }
    ```
  - Add permission to Info.plist (XML format):
    ```
    <key>NSCameraUsageDescription</key>
    <string>This app uses the camera for photo capture.</string>
    ```
- **Config Formats**: Use Info.plist for permissions (key-value pairs) or entitlements files for capabilities like iCloud (e.g., `<key>com.apple.security.application-groups</key><string>group.com.example</string>`).

## Integration Notes
- Integrate with other tools by linking via Xcode: Add pods with CocoaPods (`pod install`) or packages in Package.swift.
- For Apple services like App Store Connect, use environment variables for API keys: Set `$APPLE_API_KEY` and reference in scripts (e.g., `xcrun altool --upload-app --file MyApp.ipa --username $APPLE_USERNAME --password $APPLE_API_KEY`).
- When combining with Android (via mobile cluster), use shared configs but handle iOS-specific code in conditional blocks (e.g., `#if os(iOS)` in Swift).
- For CI/CD, integrate with GitHub Actions: Use `actions/checkout` then run `xcodebuild` in a macOS runner.
- If using third-party SDKs, add them via Swift Package Manager: Edit Package.swift and resolve with `swift package resolve`.

## Error Handling
- For permission denials, check status with `AVAuthorizationStatus.authorized` and prompt users via UIAlertController if needed.
- Handle build errors from `xcodebuild` by parsing output: Look for "Command PhaseScriptExecution failed" and fix scripts; use `xcodebuild -verbose` for details.
- For lifecycle issues, add logging in delegate methods (e.g., `print("Scene error: \(error)")` in sceneWillEnterForeground).
- Common fixes: If Info.plist keys are missing, Xcode will error on build; add them via the project editor. For HIG violations, use Xcode's accessibility audit tool and resolve warnings.
- Use try-catch for API calls: e.g., `do { try AVAudioSession.sharedInstance().setCategory(.playAndRecord) } catch { print(error.localizedDescription) }`.

## Usage Examples
- **Example 1: Basic App with Camera Permission**
  Create a new Xcode project, add NSCameraUsageDescription to Info.plist, and implement permission request in ViewController.swift:
  ```
  import UIKit
  import AVFoundation
  class ViewController: UIViewController {
      override func viewDidLoad() { super.viewDidLoad(); requestCamera() }
      func requestCamera() { AVCaptureDevice.requestAccess(for: .video) { granted in if granted { /* Proceed */ } } }
  }
  ```
  Build and run with `xcodebuild -scheme MyApp build` to test on simulator.

- **Example 2: Managing App Lifecycle**
  In a scene-based app, handle state changes in SceneDelegate.swift:
  ```
  import UIKit
  class SceneDelegate: UIResponder, UIWindowSceneDelegate {
      func sceneDidBecomeActive(_ scene: UIScene) { print("App active") }
      func sceneWillEnterForeground(_ scene: UIScene) { /* Reload data */ }
  }
  ```
  Use `xcodebuild test` to verify lifecycle events during app testing.

## Graph Relationships
- Related to: mobile (cluster), as it shares mobile development patterns.
- Connected to: android (skill), via cross-platform mobile integration.
- Links with: apple-ecosystem (tag), for broader Apple services.
- Associated with: sdk-tools (implied), for shared SDK usage in iOS context.

Related in Backend & APIs