Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Xcode 16 profile support for main branch #2228

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 38 additions & 2 deletions Common/Models/BuildDetails.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class BuildDetails {
static var `default` = BuildDetails()

let dict: [String: Any]
private var cachedProfileExpirationDate: Date?

init() {
guard let url = Bundle.main.url(forResource: "BuildDetails", withExtension: ".plist"),
Expand All @@ -23,6 +24,7 @@ class BuildDetails {
return
}
dict = parsed
cachedProfileExpirationDate = loadProfileExpirationDate()
}

var buildDateString: String? {
Expand All @@ -46,11 +48,11 @@ class BuildDetails {
}

var profileExpiration: Date? {
return dict["com-loopkit-Loop-profile-expiration"] as? Date
return cachedProfileExpirationDate
}

var profileExpirationString: String {
if let profileExpiration = profileExpiration {
if let profileExpiration = cachedProfileExpirationDate {
return "\(profileExpiration)"
} else {
return "N/A"
Expand All @@ -65,5 +67,39 @@ class BuildDetails {
var workspaceGitBranch: String? {
return dict["com-loopkit-LoopWorkspace-git-branch"] as? String
}

private func loadProfileExpirationDate() -> Date? {
guard
let profilePath = Bundle.main.path(forResource: "embedded", ofType: "mobileprovision"),
let profileData = try? Data(contentsOf: URL(fileURLWithPath: profilePath)),
let profileNSString = NSString(data: profileData, encoding: String.Encoding.ascii.rawValue)
else {
print(
"WARNING: Could not find or read `embedded.mobileprovision`. If running on Simulator, there are no provisioning profiles."
)
return nil
}

let regexPattern = "<key>ExpirationDate</key>[\\W]*?<date>(.*?)</date>"
guard let regex = try? NSRegularExpression(pattern: regexPattern, options: []),
let match = regex.firstMatch(
in: profileNSString as String,
options: [],
range: NSRange(location: 0, length: profileNSString.length)
),
let range = Range(match.range(at: 1), in: profileNSString as String)
else {
print("Warning: Could not create regex or find match.")
return nil
}

let dateString = String(profileNSString.substring(with: NSRange(range, in: profileNSString as String)))
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)

return dateFormatter.date(from: dateString)
}
}

14 changes: 0 additions & 14 deletions Scripts/capture-build-details.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ info() {
}

info_plist_path="${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/BuildDetails.plist"
provisioning_profile_path="${HOME}/Library/MobileDevice/Provisioning Profiles/${EXPANDED_PROVISIONING_PROFILE}.mobileprovision"
xcode_build_version=${XCODE_PRODUCT_BUILD_VERSION:-$(xcodebuild -version | grep version | cut -d ' ' -f 3)}
while [[ $# -gt 0 ]]
do
Expand All @@ -34,10 +33,6 @@ do
info_plist_path="${2}"
shift 2
;;
-p|--provisioning-profile-path)
provisioning_profile_path="${2}"
shift 2
;;
esac
done

Expand Down Expand Up @@ -67,15 +62,6 @@ plutil -replace com-loopkit-Loop-srcroot -string "${PWD}" "${info_plist_path}"
plutil -replace com-loopkit-Loop-build-date -string "$(date)" "${info_plist_path}"
plutil -replace com-loopkit-Loop-xcode-version -string "${xcode_build_version}" "${info_plist_path}"

if [ -e "${provisioning_profile_path}" ]; then
profile_expire_date=$(security cms -D -i "${provisioning_profile_path}" | plutil -p - | grep ExpirationDate | cut -b 23-)
# Convert to plutil format
profile_expire_date=$(date -j -f "%Y-%m-%d %H:%M:%S" "${profile_expire_date}" +"%Y-%m-%dT%H:%M:%SZ")
plutil -replace com-loopkit-Loop-profile-expiration -date "${profile_expire_date}" "${info_plist_path}"
else
warn "Invalid provisioning profile path ${provisioning_profile_path}"
fi

# determine if this is a workspace build
# if so, fill out the git revision and branch
if [ -e ../.git ]
Expand Down
2 changes: 1 addition & 1 deletion Version.xcconfig
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
//

// Version [DEFAULT]
LOOP_MARKETING_VERSION = 3.4.1
LOOP_MARKETING_VERSION = 3.4.2
CURRENT_PROJECT_VERSION = 57

// Optional override
Expand Down