All source files have been successfully migrated from the Package.swift structure to the Xcode project structure.
- Open
IntuneManager.xcodeprojin Xcode - Select the project in the navigator
- Go to Package Dependencies tab
- Click + and add these packages:
https://github.com/AzureAD/microsoft-authentication-library-for-objc.git(Version: 1.3.0+)https://github.com/kishikawakatsumi/KeychainAccess.git(Version: 4.2.2+)
- Select each target (iOS and macOS)
- Go to Build Settings
- Set these important settings:
- Swift Language Version: Swift 6
- Minimum Deployments: iOS 18.0, macOS 15.0
- Enable Strict Concurrency checking
For both iOS and macOS targets:
- Go to Signing & Capabilities
- Select your team
- Add these capabilities:
- ✅ Keychain Sharing
- ✅ App Groups (create group:
group.$(PRODUCT_BUNDLE_IDENTIFIER))
For macOS only:
- ✅ App Sandbox
- ✅ Outgoing Connections (Client)
- Select each target
- Go to Build Settings
- Search for "Info.plist"
- Set path to:
IntuneManager/Info.plist
- Select each target
- Go to Build Settings
- Search for "Entitlements"
- Set path to:
IntuneManager/IntuneManager.entitlements
IntuneManager/
├── App/ # Main app files
│ ├── IntuneManagerApp.swift # @main entry point
│ ├── UnifiedContentView.swift # Root content view
│ └── SettingsView.swift
├── Core/ # Core functionality
│ ├── Authentication/ # MSAL auth
│ ├── DataLayer/ # SwiftData models
│ ├── Networking/ # Graph API client
│ ├── Security/ # Credential management
│ └── CrossPlatform/ # Platform compatibility
├── Features/ # Feature modules
│ ├── Dashboard/
│ ├── Devices/
│ ├── Applications/
│ ├── Groups/
│ ├── Assignments/
│ └── Setup/
├── Services/ # Business logic
└── Utilities/ # Helper utilities
- Register your app in Azure AD
- Get your Client ID and Tenant ID
- Update
MSALConfiguration.swiftwith your values - Or use the in-app configuration screen on first launch
Make sure your bundle identifier matches what's registered in Azure AD for the redirect URI:
- Redirect URI format:
msauth.{your-bundle-id}://auth
The application requires the following Graph API permissions to function properly:
- DeviceManagementManagedDevices.Read.All - Read device information
- DeviceManagementManagedDevices.ReadWrite.All - Update device information
- DeviceManagementManagedDevices.PrivilegedOperations.All - Perform device sync, wipe, restart operations
- DeviceManagementApps.Read.All - Read application information
- DeviceManagementApps.ReadWrite.All - Manage application assignments
- Group.Read.All - Read group information
- GroupMember.Read.All - Read group membership
- User.Read.All - Read user profiles
- AuditLog.Read.All - Read audit logs and activity reports
- User.Read - Sign in and read user profile
- offline_access - Maintain access to data
Configure these permissions in Azure AD:
- Go to Azure Portal → App registrations
- Select your application
- Navigate to API permissions
- Add permissions → Microsoft Graph → Delegated permissions
- Select all required permissions listed above
- Grant admin consent if required by your organization
- Select an iOS Simulator or device
- Press ⌘R to build and run
- Select "My Mac" as the destination
- Press ⌘R to build and run
- Make sure you've added the package dependencies (see step 1 above)
- Clean build folder: ⌘⇧K
- Reset package caches: File → Packages → Reset Package Caches
- Check that Info.plist path is correctly set
- Verify entitlements file path is set
- Check Console.app for crash logs
- Verify your redirect URI matches:
msauth.{bundle-id}://auth - Check keychain sharing is enabled
- Ensure Client ID and Tenant ID are correct
Located in IntuneManagerTests/
Located in IntuneManagerUITests/
Run tests with ⌘U
- Archive the app (Product → Archive)
- Upload to App Store Connect
- Submit for TestFlight review
- Archive the app (Product → Archive)
- Upload to App Store Connect
- Submit for review
- Archive the app
- Export with Developer ID
- Notarize with Apple
- Distribute .dmg or .pkg
Info.plist- App configuration and permissionsIntuneManager.entitlements- App capabilities and sandbox settingsMSALConfiguration.swift- MSAL/Azure AD configurationIntuneManagerApp.swift- Main app entry point
- All files have been moved from
/Users/rob/repos/IntuneManager - The original Package.swift structure is no longer needed
- This is now a standard Xcode project ready for App Store distribution
- SwiftData models are included and configured
- MSAL authentication is ready to use
For issues, check:
- Xcode's Issue navigator (⌘5)
- Console.app for runtime logs
- The Logger output in Xcode's console
Good luck with your app! 🚀