diff --git a/fdroidserver/index.py b/fdroidserver/index.py index fb8a573f..a25c2926 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -1762,14 +1762,14 @@ def get_public_key_from_jar(jar): def make_altstore(apps, apks, config, repodir, indent=None): """ Assemble altstore-index.json for iOS (.ipa) apps. - + builds index files based on: https://faq.altstore.io/distribute-your-apps/make-a-source https://faq.altstore.io/distribute-your-apps/updating-apps """ # for now alt-store support is english only for lang in ['en']: - + # prepare minimal altstore index idx = { 'name': config['repo_name'], diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 5414c33e..6cd661a1 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -629,7 +629,7 @@ def parse_ipa(ipa_path, file_size, sha256): if info.filename.endswith("/embedded.mobileprovision"): print("parsing", info.filename) with ipa_zip.open(info) as mopro_file: - mopro_content_info = cms.ContentInfo.load(mopro_file.read()) + mopro_content_info = asn1crypto.cms.ContentInfo.load(mopro_file.read()) mopro_payload_info = mopro_content_info['content'] mopro_payload = mopro_payload_info['encap_content_info']['content'].native mopro = biplist.readPlistFromString(mopro_payload) @@ -1670,6 +1670,10 @@ def _get_ipa_icon(src_dir): def _parse_from_pbxproj(pbxproj_path, key): """Parse values from apple project files. + This is a naive regex based parser. Should this proofe to unreliable we + might want to consider using a dedicated pbxproj parser: + https://pypi.org/project/pbxproj/ + e.g. when looking for key 'ASSETCATALOG_COMPILER_APPICON_NAME' This function will extract 'MyIcon' from if the provided file contains this line: diff --git a/tests/update.TestCase b/tests/update.TestCase index 0ce7a85c..6f0b8654 100755 --- a/tests/update.TestCase +++ b/tests/update.TestCase @@ -2223,11 +2223,29 @@ class TestGetIpaIcon(unittest.TestCase): """) pfp = mock.Mock(return_value="fake_icon") - with(mock.patch("fdroidserver.update._parse_from_pbxproj", pfp)): + with mock.patch("fdroidserver.update._parse_from_pbxproj", pfp): p = fdroidserver.update._get_ipa_icon(tmpdir) self.assertEqual(str(icondir / "yep"), p) +class TestParseFromPbxproj(unittest.TestCase): + def test_parse_from_pbxproj(self): + self.maxDiff = None + + with tempfile.TemporaryDirectory() as tmpdir: + with open(Path(tmpdir) / "asdf.pbxproj", 'w', encoding="utf-8") as f: + f.write(""" + 230jfaod=flc' + ASSETCATALOG_COMPILER_APPICON_NAME = MyIcon; + cm opa1c p[m + """) + v = fdroidserver.update._parse_from_pbxproj( + Path(tmpdir) / "asdf.pbxproj", + "ASSETCATALOG_COMPILER_APPICON_NAME" + ) + self.assertEqual(v, "MyIcon") + + if __name__ == "__main__": os.chdir(os.path.dirname(__file__))