Skip to content

Commit

Permalink
Cache profile expiration date in app and remove hardcoded provisionin…
Browse files Browse the repository at this point in the history
…g profile path (#2226)
  • Loading branch information
bjorkert authored Oct 5, 2024
1 parent 1aaee2d commit 56ac6bb
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 16 deletions.
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

0 comments on commit 56ac6bb

Please sign in to comment.