# Production Postmortem: Older Project Fails to Build Universal Binary for Apple Silicon
## Summary
An Objective-C project migrated to Apple Silicon revealed compatibility issues:
- Could only run under Rosetta emulation
- Build system refused to target Apple Silicon (`arm64`)
- Identified problematic third-party libraries (`libssl.a` and Crashlytics)
- Build configuration showed `ARCHS_STANDARD` as architecture setting
## Root Cause
- **Incompatible library architectures**:
- `libssl.a` built for legacy `i386` architecture
- Crashlytics framework lacked `arm64` slice
- **Cascading build failures**:
- Presence of `i386` binary prevented `arm64` slice generation
- `ARCHS_STANDARD` automatically excluded `arm64` due to incompatible dependencies
- **Misconfigured library search paths**: Outdated paths prioritized obsolete architectures
## Why This Happens in Real Systems
- Legacy dependencies without modern architecture support
- Lax dependency hygiene in long-lived projects:
- Obsolete libraries accumulate without architecture audits
- Xcode project files decay over multiple OS versions
- False assumptions about "standard" architecture configurations
- Third-party SDKs lagging behind platform transitions
- Binary frameworks distributed without universal slices
## Real-World Impact
- **Performance**: ~40% slower execution under Rosetta emulation
- **Battery impact**: Increased power consumption on Apple Silicon devices
- **User complaints**: Fails to launch on Macs without Rosetta installed
- **App Store rejection**: Violates Apple's universal binary requirement
- **Maintenance debt**: Delayed modernization creates compounding issues
## Example or Code
### Architecture validation
Verify library compatibility using `lipo`:
```bash
# Check all dependencies in Frameworks folder
find . -name "*.a" -o -name "*.framework" | while read file; do
echo "Checking $file"
lipo -info "$file"
done
Expected output for universal binary
Architectures in the fat file: Mobile.framework/Mobile are: arm64 x86_64
Failure output
Architectures in the fat file