@@ -21,7 +21,7 @@ extern std::vector<unsigned char> readFile(const char* filename);
2121
2222namespace fs = std::filesystem;
2323
24- Application::Application ()
24+ Application::Application () : _minimumOSVersion( 0 , 0 , 0 )
2525{
2626}
2727
@@ -33,12 +33,13 @@ Application::~Application()
3333 }
3434}
3535
36- Application::Application (const Application& app)
36+ Application::Application (const Application& app) : _minimumOSVersion( 0 , 0 , 0 )
3737{
3838 _name = app.name ();
3939 _bundleIdentifier = app.bundleIdentifier ();
4040 _version = app.version ();
4141 _path = app.path ();
42+ _minimumOSVersion = app.minimumOSVersion ();
4243
4344 // Don't assign _entitlementsString or _entitlements,
4445 // since each copy will create its own entitlements lazily.
@@ -56,11 +57,12 @@ Application& Application::operator=(const Application& app)
5657 _bundleIdentifier = app.bundleIdentifier ();
5758 _version = app.version ();
5859 _path = app.path ();
60+ _minimumOSVersion = app.minimumOSVersion ();
5961
6062 return *this ;
6163}
6264
63- Application::Application (std::string appBundlePath)
65+ Application::Application (std::string appBundlePath) : _minimumOSVersion( 0 , 0 , 0 )
6466{
6567 fs::path path (appBundlePath);
6668 path.append (" Info.plist" );
@@ -97,6 +99,7 @@ Application::Application(std::string appBundlePath)
9799
98100 // Optional properties
99101 auto versionNode = plist_dict_get_item (plist, " CFBundleShortVersionString" );
102+ auto minimumOSVersionNode = plist_dict_get_item (plist, " MinimumOSVersion" );
100103
101104 std::string version (" 1.0" );
102105 if (versionNode != nullptr )
@@ -108,10 +111,21 @@ Application::Application(std::string appBundlePath)
108111 free (versionString);
109112 }
110113
114+ OperatingSystemVersion minimumOSVersion (1 , 0 , 0 );
115+ if (minimumOSVersionNode != nullptr )
116+ {
117+ char * minOSVersionString = nullptr ;
118+ plist_get_string_val (minimumOSVersionNode, &minOSVersionString);
119+ minimumOSVersion = OperatingSystemVersion (minOSVersionString);
120+
121+ free (minOSVersionString);
122+ }
123+
111124 _name = name;
112125 _bundleIdentifier = bundleIdentifier;
113126 _version = version;
114127 _path = appBundlePath;
128+ _minimumOSVersion = minimumOSVersion;
115129
116130 free (name);
117131 free (bundleIdentifier);
@@ -194,6 +208,11 @@ std::vector<std::shared_ptr<Application>> Application::appExtensions() const
194208 return appExtensions;
195209}
196210
211+ OperatingSystemVersion Application::minimumOSVersion () const
212+ {
213+ return _minimumOSVersion;
214+ }
215+
197216std::string Application::entitlementsString ()
198217{
199218 if (_entitlementsString == " " )
0 commit comments