55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
"""Post-generation fix for XcodeGen issue #1549: XcodeGen does not link
|
|
XCSwiftPackageProductDependency entries to local (path-based) Swift packages,
|
|
which makes the Xcode GUI report "Missing package product". This script
|
|
attaches the MartinOMEMO product dependencies to the vendored local package
|
|
reference in the generated project file.
|
|
|
|
Run after every `xcodegen generate` (see the Makefile `project` target).
|
|
"""
|
|
import sys
|
|
|
|
PBXPROJ = "Luma.xcodeproj/project.pbxproj"
|
|
|
|
|
|
def main() -> int:
|
|
with open(PBXPROJ, encoding="utf-8") as handle:
|
|
text = handle.read()
|
|
|
|
# Find the object id of the local package reference.
|
|
ref_id = None
|
|
for line in text.splitlines():
|
|
marker = " /* XCLocalSwiftPackageReference \"ThirdParty/MartinOMEMO\" */ = {"
|
|
if marker in line:
|
|
ref_id = line.split(" /*")[0].strip()
|
|
break
|
|
if ref_id is None:
|
|
print("patch-xcodeproj: local package reference not found; nothing to do")
|
|
return 0
|
|
|
|
needle = (
|
|
"/* MartinOMEMO */ = {\n"
|
|
"\t\t\tisa = XCSwiftPackageProductDependency;\n"
|
|
"\t\t\tproductName = MartinOMEMO;"
|
|
)
|
|
patch = (
|
|
"/* MartinOMEMO */ = {\n"
|
|
"\t\t\tisa = XCSwiftPackageProductDependency;\n"
|
|
"\t\t\tpackage = " + ref_id + " /* XCLocalSwiftPackageReference \"ThirdParty/MartinOMEMO\" */;\n"
|
|
"\t\t\tproductName = MartinOMEMO;"
|
|
)
|
|
|
|
count = text.count(needle)
|
|
if count == 0:
|
|
print("patch-xcodeproj: MartinOMEMO product dependencies already linked")
|
|
return 0
|
|
patched = text.replace(needle, patch)
|
|
with open(PBXPROJ, "w", encoding="utf-8") as handle:
|
|
handle.write(patched)
|
|
print("patch-xcodeproj: linked " + str(count) + " MartinOMEMO product dependencies")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|