@daemux/store-automator 0.10.81 → 0.10.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,14 +5,14 @@
5
5
  },
6
6
  "metadata": {
7
7
  "description": "App Store & Google Play automation for Flutter apps",
8
- "version": "0.10.81"
8
+ "version": "0.10.82"
9
9
  },
10
10
  "plugins": [
11
11
  {
12
12
  "name": "store-automator",
13
13
  "source": "./plugins/store-automator",
14
14
  "description": "3 agents for app store publishing: reviewer, meta-creator, media-designer",
15
- "version": "0.10.81",
15
+ "version": "0.10.82",
16
16
  "keywords": [
17
17
  "flutter",
18
18
  "app-store",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daemux/store-automator",
3
- "version": "0.10.81",
3
+ "version": "0.10.82",
4
4
  "description": "Full App Store & Google Play automation for Flutter apps with Claude Code agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "store-automator",
3
- "version": "0.10.81",
3
+ "version": "0.10.82",
4
4
  "description": "App Store & Google Play automation agents for Flutter app publishing",
5
5
  "author": {
6
6
  "name": "Daemux"
@@ -37,7 +37,14 @@ from asc_common import get_json, request
37
37
 
38
38
 
39
39
  PROFILE_PREFIX = "CI-"
40
- PROFILES_DIR = Path.home() / "Library/MobileDevice/Provisioning Profiles"
40
+
41
+ # Xcode 16+ moved the canonical profile directory. Older Xcode releases used
42
+ # ~/Library/MobileDevice/Provisioning Profiles/. We write to BOTH so the same
43
+ # script works on macos-14 (Xcode 15) and macos-15 (Xcode 26).
44
+ _PROFILE_DIRS = [
45
+ Path.home() / "Library/Developer/Xcode/UserData/Provisioning Profiles",
46
+ Path.home() / "Library/MobileDevice/Provisioning Profiles",
47
+ ]
41
48
 
42
49
  # Product types that must be signed with a provisioning profile. App
43
50
  # extensions share the common ``com.apple.product-type.app-extension`` prefix
@@ -342,15 +349,26 @@ def create_profile(
342
349
 
343
350
 
344
351
  def install_profile(profile_der: bytes) -> str:
345
- PROFILES_DIR.mkdir(parents=True, exist_ok=True)
346
- tmp_path = PROFILES_DIR / "tmp.mobileprovision"
352
+ primary = _PROFILE_DIRS[0]
353
+ primary.mkdir(parents=True, exist_ok=True)
354
+ tmp_path = primary / "tmp.mobileprovision"
347
355
  tmp_path.write_bytes(profile_der)
348
356
  decoded = subprocess.check_output(
349
357
  ["security", "cms", "-D", "-i", str(tmp_path)]
350
358
  )
351
- uuid = plistlib.loads(decoded)["UUID"]
352
- final_path = PROFILES_DIR / f"{uuid}.mobileprovision"
353
- tmp_path.rename(final_path)
359
+ plist = plistlib.loads(decoded)
360
+ uuid = plist["UUID"]
361
+ team_ids = plist.get("TeamIdentifier") or []
362
+ profile_name = plist.get("Name") or "<unknown>"
363
+ final_name = f"{uuid}.mobileprovision"
364
+ for directory in _PROFILE_DIRS:
365
+ directory.mkdir(parents=True, exist_ok=True)
366
+ (directory / final_name).write_bytes(profile_der)
367
+ tmp_path.unlink(missing_ok=True)
368
+ print(
369
+ f" profile {profile_name!r}: uuid={uuid} team={team_ids} "
370
+ f"dirs={[str(d) for d in _PROFILE_DIRS]}"
371
+ )
354
372
  return uuid
355
373
 
356
374