class AppInfo::MobileProvision
.mobileprovision file parser
Public Class Methods
new(path)
click to toggle source
# File lib/app_info/mobile_provision.rb, line 9 def initialize(path) @path = path end
Public Instance Methods
[](key)
click to toggle source
# File lib/app_info/mobile_provision.rb, line 195 def [](key) mobileprovision.try(:[], key.to_s) end
adhoc?()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 106 def adhoc? return false if platform == :macos # macOS no need adhoc !development? && !devices.nil? end
app_name()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 17 def app_name mobileprovision.try(:[], 'AppIDName') end
appstore?()
click to toggle source
Detect app store type
related link: developer.apple.com/library/archive/qa/qa1830/_index.html
# File lib/app_info/mobile_provision.rb, line 95 def appstore? case platform.downcase.to_sym when :ios !development? && entitlements.key?('beta-reports-active') when :macos !development? else raise Error, "Not implement with platform: #{platform}" end end
created_date()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 57 def created_date mobileprovision.try(:[], 'CreationDate') end
developer_certs()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 69 def developer_certs certs = mobileprovision.try(:[], 'DeveloperCertificates') return if certs.empty? certs.each_with_object([]) do |cert, obj| obj << DeveloperCertificate.new(cert) end end
development?()
click to toggle source
Detect is development type of mobileprovision
related link: stackoverflow.com/questions/1003066/what-does-get-task-allow-do-in-xcode
# File lib/app_info/mobile_provision.rb, line 81 def development? case platform.downcase.to_sym when :ios entitlements['get-task-allow'] == true when :macos !devices.nil? else raise Error, "Not implement with platform: #{platform}" end end
devices()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 41 def devices mobileprovision.try(:[], 'ProvisionedDevices') end
empty?()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 199 def empty? mobileprovision.nil? end
enabled_capabilities()
click to toggle source
Enabled Capabilites
Related link: developer.apple.com/support/app-capabilities/
# File lib/app_info/mobile_provision.rb, line 122 def enabled_capabilities capabilities = [] capabilities << 'In-App Purchase' << 'GameKit' if adhoc? || appstore? entitlements.each do |key, _| case key when 'aps-environment' capabilities << 'Push Notifications' when 'com.apple.developer.applesignin' capabilities << 'Sign In with Apple' when 'com.apple.developer.siri' capabilities << 'SiriKit' when 'com.apple.security.application-groups' capabilities << 'App Groups' when 'com.apple.developer.associated-domains' capabilities << 'Associated Domains' when 'com.apple.developer.default-data-protection' capabilities << 'Data Protection' when 'com.apple.developer.networking.networkextension' capabilities << 'Network Extensions' when 'com.apple.developer.networking.vpn.api' capabilities << 'Personal VPN' when 'com.apple.developer.healthkit', 'com.apple.developer.healthkit.access' capabilities << 'HealthKit' unless capabilities.include?('HealthKit') when 'com.apple.developer.icloud-services', 'com.apple.developer.icloud-container-identifiers' capabilities << 'iCloud' unless capabilities.include?('iCloud') when 'com.apple.developer.in-app-payments' capabilities << 'Apple Pay' when 'com.apple.developer.homekit' capabilities << 'HomeKit' when 'com.apple.developer.user-fonts' capabilities << 'Fonts' when 'com.apple.developer.pass-type-identifiers' capabilities << 'Wallet' when 'inter-app-audio' capabilities << 'Inter-App Audio' when 'com.apple.developer.networking.multipath' capabilities << 'Multipath' when 'com.apple.developer.authentication-services.autofill-credential-provider' capabilities << 'AutoFill Credential Provider' when 'com.apple.developer.networking.wifi-info' capabilities << 'Access WiFi Information' when 'com.apple.external-accessory.wireless-configuration' capabilities << 'Wireless Accessory Configuration' when 'com.apple.developer.kernel.extended-virtual-addressing' capabilities << 'Extended Virtual Address Space' when 'com.apple.developer.nfc.readersession.formats' capabilities << 'NFC Tag Reading' when 'com.apple.developer.ClassKit-environment' capabilities << 'ClassKit' when 'com.apple.developer.networking.HotspotConfiguration' capabilities << 'Hotspot' when 'com.apple.developer.devicecheck.appattest-environment' capabilities << 'App Attest' when 'com.apple.developer.coremedia.hls.low-latency' capabilities << 'Low Latency HLS' when 'com.apple.developer.associated-domains.mdm-managed' capabilities << 'MDM Managed Associated Domains' # macOS Only when 'com.apple.developer.maps' capabilities << 'Maps' when 'com.apple.developer.system-extension.install' capabilities << 'System Extension' when 'com.apple.developer.networking.custom-protocol' capabilities << 'Custom Network Protocol' end end capabilities end
enterprise?()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 112 def enterprise? return false if platform == :macos # macOS no need adhoc !development? && !adhoc? && !appstore? end
Also aliased as: inhouse?
entitlements()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 65 def entitlements mobileprovision.try(:[], 'Entitlements') end
expired_date()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 61 def expired_date mobileprovision.try(:[], 'ExpirationDate') end
method_missing(method_name, *args, &block)
click to toggle source
Calls superclass method
# File lib/app_info/mobile_provision.rb, line 214 def method_missing(method_name, *args, &block) mobileprovision.try(:[], Util.format_key(method_name)) || mobileprovision.send(method_name) || super end
mobileprovision()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 203 def mobileprovision return @mobileprovision = nil unless File.exist?(@path) data = File.read(@path) data = strip_plist_wrapper(data) unless bplist?(data) list = CFPropertyList::List.new(data: data).value @mobileprovision = CFPropertyList.native_types(list) rescue CFFormatError @mobileprovision = nil end
name()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 13 def name mobileprovision.try(:[], 'Name') end
platform()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 37 def platform platforms[0] end
platforms()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 28 def platforms return unless platforms = mobileprovision.try(:[], 'Platform') platforms.map do |v| v = 'macOS' if v == 'OSX' v.downcase.to_sym end end
profile_name()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 53 def profile_name mobileprovision.try(:[], 'Name') end
respond_to_missing?(method_name, *args)
click to toggle source
Calls superclass method
# File lib/app_info/mobile_provision.rb, line 220 def respond_to_missing?(method_name, *args) mobileprovision.key?(Util.format_key(method_name)) || mobileprovision.respond_to?(method_name) || super end
team_identifier()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 45 def team_identifier mobileprovision.try(:[], 'TeamIdentifier') end
team_name()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 49 def team_name mobileprovision.try(:[], 'TeamName') end
type()
click to toggle source
# File lib/app_info/mobile_provision.rb, line 21 def type return :development if development? return :adhoc if adhoc? return :appstore if appstore? return :enterprise if enterprise? end
Private Instance Methods
bplist?(raw)
click to toggle source
# File lib/app_info/mobile_provision.rb, line 228 def bplist?(raw) raw[0..5] == 'bplist' end
strip_plist_wrapper(raw)
click to toggle source
# File lib/app_info/mobile_provision.rb, line 232 def strip_plist_wrapper(raw) end_tag = '</plist>' start_point = raw.index('<?xml version=') end_point = raw.index(end_tag) + end_tag.size - 1 raw[start_point..end_point] end