fix(ios): support Xcode 16+ team detection and fix ntohl build error

Xcode 16+/26 no longer writes IDEProvisioningTeams to the preferences
plist, breaking ios-team-id.sh for newly signed-in accounts. Add
provisioning profile fallback and actionable error when an account
exists but no team ID can be resolved. Also replace ntohl() with
UInt32(bigEndian:) for Swift 6 compatibility and gitignore Xcode
build output directories.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Brian Leach
2026-02-21 11:04:27 -06:00
committed by Peter Steinberger
parent 9ccc15f3a6
commit 73f526f025
2 changed files with 55 additions and 1 deletions

6
.gitignore vendored
View File

@@ -102,6 +102,12 @@ skills-lock.json
# Local iOS signing overrides
apps/ios/LocalSigning.xcconfig
# Xcode build directories (xcodebuild output)
apps/ios/build/
apps/shared/OpenClawKit/build/
Swabble/build/
# Generated protocol schema (produced via pnpm protocol:gen)
dist/protocol.schema.json
.ant-colony/

View File

@@ -80,9 +80,45 @@ load_teams_from_legacy_defaults_key() {
)
}
load_teams_from_xcode_managed_profiles() {
local profiles_dir="${HOME}/Library/MobileDevice/Provisioning Profiles"
[[ -d "$profiles_dir" ]] || return 0
while IFS= read -r team; do
[[ -z "$team" ]] && continue
append_team "$team" "0" ""
done < <(
for p in "${profiles_dir}"/*.mobileprovision; do
[[ -f "$p" ]] || continue
security cms -D -i "$p" 2>/dev/null \
| /usr/bin/python3 -c '
import plistlib, sys
try:
d = plistlib.load(sys.stdin.buffer)
for tid in d.get("TeamIdentifier", []):
print(tid)
except Exception:
pass
' 2>/dev/null
done | sort -u
)
}
has_xcode_account() {
local plist_path="${HOME}/Library/Preferences/com.apple.dt.Xcode.plist"
[[ -f "$plist_path" ]] || return 1
local accts
accts="$(defaults read com.apple.dt.Xcode DVTDeveloperAccountManagerAppleIDLists 2>/dev/null || true)"
[[ -n "$accts" ]] && [[ "$accts" != *"does not exist"* ]] && grep -q 'identifier' <<< "$accts"
}
load_teams_from_xcode_preferences
load_teams_from_legacy_defaults_key
if [[ ${#team_ids[@]} -eq 0 ]]; then
load_teams_from_xcode_managed_profiles
fi
if [[ ${#team_ids[@]} -eq 0 && "$allow_keychain_fallback" == "1" ]]; then
while IFS= read -r team; do
[[ -z "$team" ]] && continue
@@ -95,7 +131,19 @@ if [[ ${#team_ids[@]} -eq 0 && "$allow_keychain_fallback" == "1" ]]; then
fi
if [[ ${#team_ids[@]} -eq 0 ]]; then
if [[ "$allow_keychain_fallback" == "1" ]]; then
if has_xcode_account; then
echo "An Apple account is signed in to Xcode, but no Team ID could be resolved." >&2
echo "" >&2
echo "On Xcode 16+, team data is not written until you build a project." >&2
echo "To fix this, do ONE of the following:" >&2
echo "" >&2
echo " 1. Open the iOS project in Xcode, select your Team in Signing &" >&2
echo " Capabilities, and build once. Then re-run this script." >&2
echo "" >&2
echo " 2. Set your Team ID directly:" >&2
echo " export IOS_DEVELOPMENT_TEAM=<your-10-char-team-id>" >&2
echo " Find your Team ID at: https://developer.apple.com/account#MembershipDetailsCard" >&2
elif [[ "$allow_keychain_fallback" == "1" ]]; then
echo "No Apple Team ID found. Open Xcode or install signing certificates first." >&2
else
echo "No Apple Team ID found in Xcode accounts. Open Xcode → Settings → Accounts and sign in, then retry." >&2