@@ -177,99 +177,71 @@ func SecTaskCopyValuesForEntitlements(
177177 _ error: UnsafeMutablePointer < Unmanaged < CFError > ? > ?
178178) -> CFDictionary ?
179179
180- func releaseSecTask ( _ task : SecTaskRef ) {
181- let cf = unsafeBitCast ( task , to : CFTypeRef . self )
182- CFRelease ( cf )
183- }
180+ func withSecTask ( _ block : @escaping ( SecTaskRef ) -> Void ) {
181+ guard let task = SecTaskCreateFromSelf ( nil ) else { return }
182+ block ( task )
183+ CFRelease ( unsafeBitCast ( task , to : CFTypeRef . self ) )
184184
185- func checkAppEntitlements( _ ents: [ String ] ) -> [ String : Any ] {
186- guard let task = SecTaskCreateFromSelf ( nil ) else {
187- return [ : ]
188- }
189- defer {
190- releaseSecTask ( task)
191- }
185+ }
192186
193- guard let entitlements = SecTaskCopyValuesForEntitlements ( task, ents as CFArray , nil ) else {
194- return [ : ]
187+ func withSecEntitlements( for entitlements: [ String ] , _ block: @escaping ( CFDictionary ) -> Void ) {
188+ withSecTask { task in
189+ if let entitlements = SecTaskCopyValuesForEntitlements ( task, entitlements as CFArray , nil ) {
190+ block ( entitlements)
191+ }
195192 }
196-
197- return ( entitlements as NSDictionary ) as? [ String : Any ] ?? [ : ]
198193}
199194
200- func checkAppEntitlement( _ ent: String ) -> Bool {
201- guard let task = SecTaskCreateFromSelf ( nil ) else {
202- return false
203- }
204- defer {
205- releaseSecTask ( task)
195+ func withSecEntitlement( for entitlement: String , _ block: @escaping ( CFTypeRef ) -> Void ) {
196+ withSecTask { task in
197+ if let entitlement = SecTaskCopyValueForEntitlement ( task, entitlement as NSString , nil ) {
198+ block ( entitlement)
199+ }
206200 }
201+ }
207202
208- guard let entitlement = SecTaskCopyValueForEntitlement ( task, ent as NSString , nil ) else {
209- return false
203+ func checkAppEntitlements( _ ents: [ String ] ) -> [ String : Any ] {
204+ var ret : [ String : Any ] = [ : ]
205+ withSecEntitlements ( for: ents) { entitlements in
206+ ret = ( entitlements as NSDictionary ) as? [ String : Any ] ?? [ : ]
210207 }
208+ return ret
209+ }
211210
212- if let number = entitlement as? NSNumber {
213- return number. boolValue
214- } else if let bool = entitlement as? Bool {
215- return bool
211+ func checkAppEntitlement( _ ent: String ) -> Bool {
212+ var ret : Bool = false
213+ withSecEntitlement ( for: ent) { entitlement in
214+ if let num = entitlement as? NSNumber {
215+ ret = num. boolValue
216+ } else if let bool = entitlement as? Bool {
217+ ret = bool
218+ }
216219 }
217-
218- return false
220+ return ret
219221}
220222
221223func getEntitlement( _ ent: String ) -> String {
222- guard let task = SecTaskCreateFromSelf ( nil ) else {
223- return " "
224- }
225- defer {
226- releaseSecTask ( task)
227- }
228-
229- guard let entitlement = SecTaskCopyValueForEntitlement (
230- task,
231- ent as NSString ,
232- nil
233- ) else {
234- return " "
235- }
236-
237- if let appGroupsArray = entitlement as? String {
238- return appGroupsArray
239- } else if let appGroupsNSArray = entitlement as? NSString as? String {
240- return appGroupsNSArray
224+ var ret : String = " "
225+ withSecEntitlement ( for: ent) { entitlement in
226+ if let entitlement = entitlement as? String {
227+ ret = entitlement
228+ } else if let entitlement = entitlement as? NSString as? String {
229+ ret = entitlement
230+ }
241231 }
242-
243- return " "
232+ return ret
244233}
245234
246-
247235func getAppGroups( ) -> [ String ] {
248- guard let task = SecTaskCreateFromSelf ( nil ) else {
249- return [ ]
250- }
251- defer {
252- releaseSecTask ( task)
253- }
254-
255- guard let entitlement = SecTaskCopyValueForEntitlement (
256- task,
257- " com.apple.security.application-groups " as NSString ,
258- nil
259- ) else {
260- return [ ]
261- }
262-
263- if let appGroupsArray = entitlement as? [ String ] {
264- return appGroupsArray
265- } else if let appGroupsNSArray = entitlement as? NSArray as? [ String ] {
266- return appGroupsNSArray
267- } else if CFGetTypeID ( entitlement) == CFArrayGetTypeID ( ) {
268- let cfArray = entitlement as! CFArray
269- return ( cfArray as NSArray ) as? [ String ] ?? [ ]
236+ var ret : [ String ] = [ ]
237+ withSecEntitlement ( for: " com.apple.security.application-groups " ) { groups in
238+ if let groups = groups as? [ String ] {
239+ ret = groups
240+ } else if let groups = groups as? NSArray as? [ String ] {
241+ ret = groups
242+ } else if CFGetTypeID ( groups) == CFArrayGetTypeID ( ) {
243+ ret = groups as! CFArray as NSArray as? [ String ] ?? [ ]
244+ }
270245 }
271-
272- return [ ]
246+ return ret
273247}
274-
275-
0 commit comments