diff --git a/scripts/CommandBuilders/InstallProfileCommandBuilder.py b/scripts/CommandBuilders/InstallProfileCommandBuilder.py new file mode 100644 index 0000000..f477259 --- /dev/null +++ b/scripts/CommandBuilders/InstallProfileCommandBuilder.py @@ -0,0 +1,21 @@ +from commands.CopyCommand import CopyCommand +from parser.InstallProfileParser import InstallProfileParser + + +class InstallProfileCommandBuilder: + def __init__(self): + pass + + def isInstallProfile(self, line): + assert line is not None + + return line.startswith('install profile') + + def getCommandFor(self, line): + assert line is not None + + parser = InstallProfileParser() + cpArgs = parser.parseLine(line) + + command = CopyCommand(cpArgs) + return command diff --git a/scripts/Core/StepsRunner.py b/scripts/Core/StepsRunner.py index 806061f..9643fe4 100644 --- a/scripts/Core/StepsRunner.py +++ b/scripts/Core/StepsRunner.py @@ -2,6 +2,7 @@ from CommandBuilders.CleanBuildCommandBuilder import CleanBuildCommandBuilder from CommandBuilders.CopyCommandBuilder import CopyCommandBuilder from CommandBuilders.CreateBackupCommandBuilder import CreateBackupCommandBuilder from CommandBuilders.DeleteBackupCommandBuilder import DeleteBackupCommandBuilder +from CommandBuilders.InstallProfileCommandBuilder import InstallProfileCommandBuilder from CommandBuilders.MakeDirsCommandBuilder import MakeDirsCommandBuilder from CommandBuilders.PatchCsprojCommandBuilder import PatchCsprojCommandBuilder from CommandBuilders.PatchInfoplistCommandBuilder import PatchInfoplistCommandBuilder @@ -30,6 +31,7 @@ class StepsRunner: self.patchInfoPlist = PatchInfoplistCommandBuilder(self.valueProvider) self.copyBuilder = CopyCommandBuilder() self.testflightBuilder = TestflightCommandBuilder() + self.installProfileBuilder = InstallProfileCommandBuilder() buildUtilPath = config['build_tool'] self.cleanBuilder = CleanBuildCommandBuilder(buildUtilPath, 'clean') @@ -72,6 +74,8 @@ class StepsRunner: cmd =self.deleteBackupBuilder.getCommandFor(line) elif self.testflightBuilder.isTestflight(line): cmd = self.testflightBuilder.getCommandFor(line) + elif self.installProfileBuilder.isInstallProfile(line): + cmd = self.installProfileBuilder.getCommandFor(line) else: msg = "unrecognised step. Line: '{0}'".format(line) raise Exception(msg) diff --git a/scripts/IosSteps.txt b/scripts/IosSteps.txt index 3e80964..eb5b620 100644 --- a/scripts/IosSteps.txt +++ b/scripts/IosSteps.txt @@ -10,7 +10,7 @@ inside 'BuildSample/BuildSample/CoolApp.csproj' set OutputPath to 'Output' inside 'BuildSample/BuildSample/Info.plist' set CFBundleVersion to '{@version}' inside 'BuildSample/BuildSample/Info.plist' set CFBundleDisplayName to 'CoolApp' -copy 'BuildSample/BuildSample/Profiles/8F606DAE-F9C9-4A19-8EFF-34B990D76C28.mobileprovision' to '~/Library/MobileDevice/Provisioning Profiles/BuildScript.mobileprovision' +install profile 'BuildSample/BuildSample/Profiles/8F606DAE-F9C9-4A19-8EFF-34B990D76C28.mobileprovision' clean 'BuildSample/BuildSample.sln' for '{@sln_config}' build 'BuildSample/BuildSample.sln' for '{@sln_config}' diff --git a/scripts/Tests/ManualTests/install_profile.py b/scripts/Tests/ManualTests/install_profile.py new file mode 100644 index 0000000..1f588f6 --- /dev/null +++ b/scripts/Tests/ManualTests/install_profile.py @@ -0,0 +1,8 @@ +from CommandBuilders.InstallProfileCommandBuilder import InstallProfileCommandBuilder + +line = "install profile 'BuildSample/BuildSample/Profiles/8F606DAE-F9C9-4A19-8EFF-34B990D76C28.mobileprovision'" + +builder = InstallProfileCommandBuilder() +command = builder.getCommandFor(line) + +command.execute() \ No newline at end of file diff --git a/scripts/Tests/UnitTests/InstallProfile/__init__.py b/scripts/Tests/UnitTests/InstallProfile/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/Tests/UnitTests/InstallProfile/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov' diff --git a/scripts/Tests/UnitTests/InstallProfile/test_installProfile.py b/scripts/Tests/UnitTests/InstallProfile/test_installProfile.py new file mode 100644 index 0000000..56d0631 --- /dev/null +++ b/scripts/Tests/UnitTests/InstallProfile/test_installProfile.py @@ -0,0 +1,14 @@ +import unittest +from parser.InstallProfileParser import InstallProfileParser + + +class TestInstallProfile(unittest.TestCase): + def setUp(self): + self.parser = InstallProfileParser() + + def test_parse(self): + line = "install profile 'Path/To/Profile.mobileprovision'" + copyArgs = self.parser.parseLine(line) + + self.assertEqual('Path/To/Profile.mobileprovision', copyArgs.source) + self.assertEqual('~/Library/MobileDevice/Provisioning Profiles/Profile.mobileprovision', copyArgs.target) \ No newline at end of file diff --git a/scripts/parser/InstallProfileParser.py b/scripts/parser/InstallProfileParser.py new file mode 100644 index 0000000..2075bb3 --- /dev/null +++ b/scripts/parser/InstallProfileParser.py @@ -0,0 +1,34 @@ +import re +import os +from parser.CopyParser.CopyArguments import CopyArguments +from parser.LineParser import LineParser + + +class InstallProfileParser(LineParser): + def __init__(self): + LineParser.__init__(self) + self.__copyArguments = CopyArguments() + self.__profileStorageDir = '~/Library/MobileDevice/Provisioning Profiles/' + + def parseLine(self, line): + assert line is not None + + profilePathRegexp = r"'(?P[^']+)'$" + regexpSource = self.startsWith('install') + self.than('profile') + profilePathRegexp + + regexp = re.compile(regexpSource, re.UNICODE) + + match = regexp.match(line) + self._guardMatch(match, line, regexpSource) + + srcPath = match.group('path') + dstPath = self.getDestinationPath(srcPath) + + self.__copyArguments.setArguments(srcPath, dstPath) + return self.__copyArguments + + def getDestinationPath(self, sourcePath): + profileFileName = os.path.basename(sourcePath) + destination = os.path.join(self.__profileStorageDir, profileFileName) + + return destination \ No newline at end of file diff --git a/scripts/run_manual_tests.py b/scripts/run_manual_tests.py index e4f2173..48d8410 100644 --- a/scripts/run_manual_tests.py +++ b/scripts/run_manual_tests.py @@ -18,5 +18,6 @@ os.chdir(baseDir) #import ManualTests.remove_project #import ManualTests.infoplist_test #import ManualTests.clean_test -import Tests.ManualTests.testflight_test +#import Tests.ManualTests.testflight_test +import Tests.ManualTests.install_profile