A Swift based reimplementation of the Apple HUD (Volume, Ringer, Rotation,…) for iOS 8.

Last update: May 15, 2022

Build Status License Platform CocoaPod SPM compatible Carthage compatible

PKHUD - Swift and easy

A Swift based reimplementation of the Apple HUD (Volume, Ringer, Rotation,…) for iOS 8 and up.

Features

  • Official iOS 8 blur effect via UIVisualEffectsView.
  • Proper rotation support.
  • Size / Device agnostic.
  • Works on top of presented view controllers, alerts,...
  • Comes with several free resources - Checkmark, Cross, Progress Indicator,…
  • …as well as animated ones.
  • Builds as an iOS 8 framework.

PKHUD.gif

Installation

The recommended way is to use CocoaPods.

CocoaPods

To install PKHUD for Swift 2 using CocoaPods, include the following in your Podfile

pod 'PKHUD', '~> 3.0'

To install PKHUD for Swift 3.x using CocoaPods, include the following in your Podfile

pod 'PKHUD', '~> 4.0'

To install PKHUD for Swift 4.x, include the following in your Podfile

pod 'PKHUD', '~> 5.0'

Carthage

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.

You can install Carthage with Homebrew using the following command:

$ brew update
$ brew install carthage

To integrate PKHUD into your Xcode project using Carthage, specify it in your Cartfile:

github "pkluz/PKHUD" ~> 4.0

Run carthage update to build the framework and drag the built PKHUD.framework into your Xcode project.

Swift Package Manager

To install using Swift Package Manager, add this to the dependencies: section in your Package.swift file:

.package(url: "https://github.com/pkluz/PKHUD.git", .upToNextMinor(from: "5.4.0")),

How To

After adding the framework to your project, you need to import the module

import PKHUD

Now, you can proceed to show an arbitrary HUD (and have it automatically disappear a second later) like this:

HUD.flash(.success, delay: 1.0)

or with a completion handler:

HUD.flash(.success, delay: 1.0) { finished in 
    // Completion Handler
}

alternatively, you can use the more verbose and flexible “plumbing” API:

PKHUD.sharedHUD.contentView = PKHUDSuccessView()
PKHUD.sharedHUD.show()
PKHUD.sharedHUD.hide(afterDelay: 1.0) { success in 
    // Completion Handler
}

You can also hot-swap content views - this can prove useful if you want to display a progress HUD first and transform it into a success or error HUD after an asynchronous operation has finished.

HUD.show(.progress)
        
// Now some long running task starts...
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
    // ...and once it finishes we flash the HUD for a second.
   HUD.flash(.success, delay: 1.0)
}

Please note that there are multiple types of content views that ship with PKHUD. You can find them as separate files in the project folder as well as in the ContentViews group in Xcode.

Communication (Hat Tip AlamoFire)

  • If you need help, use Stack Overflow. (Tag 'pkhud')
  • If you'd like to ask a general question, use Stack Overflow.
  • If you found a bug, open an issue.
  • If you have a feature request, open an issue.
  • If you want to contribute, submit a pull request.

Customization

There are two properties at your disposal to customize general behavior.

  • PKHUD.sharedHUD.dimsBackground: Bool defines whether the background is slightly dimmed when the HUD is shown.

  • PKHUD.sharedHUD.userInteractionOnUnderlyingViewsEnabled: Bool defines whether the underlying views respond to touches while the HUD is shown.

Additionally you are free to create you own custom content views. They can descend from any UIView type or the predefined base classes PKHUDSquareBaseView and PKHUDWideBaseView.

Note: It's neither possible to customize the general look and feel, nor do I plan to add that feature. You are free to provide any content views you wish but the blurring, corner radius and shading will remain the same.

Credits

PKHUD is owned and maintained by Philip Kluz. Other mantainers are:

Xamarin

If you are Xamarin developer you can use this port.

License

The MIT License (MIT)

Copyright (c) 2015 Philip Kluz ([email protected])

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

GitHub

https://github.com/pkluz/PKHUD
Comments
  • 1. Add grace time support

    Grace period is the time (in seconds) that the invoked method may be run without showing the HUD. If the task finishes before the grace time runs out, the HUD will not be shown at all. This may be used to prevent HUD display for very short tasks. Defaults to 0 (no grace time). like MBProgressHUD.

    Reviewed by isaced at 2017-01-14 10:34
  • 2. Refactoring adding init

    Maybe this PR is not ready to be merge, but I've done a general refactoring moving

    • imageView
    • titleLabel
    • subtitleLabel
    • layoutSubviews

    to PKHUDSquareBaseView and with a new init with optional values is possible to create all the possible combination of HUD (for example PKHUDSuccessView with title, only subtitle of both). simulator screen shot 18 gen 2016 21 44 29 simulator screen shot 18 gen 2016 21 46 31 simulator screen shot 18 gen 2016 21 47 04 simulator screen shot 18 gen 2016 21 47 25 simulator screen shot 18 gen 2016 21 49 14

    Some classes (PKHUDTitleView, PKHUDSubtitleView, PKHUDStatusView, PKHUDStatusProgressView) became obsolete but I think that only PKHUDStatusProgressView should be removed for compatibility reason.

    Reviewed by PGLongo at 2016-01-18 20:53
  • 3. Add compatibility to Swift 4.2 on Xcode 10 GM

    Fixed the 2 errors thrown by Xcode 10 GM on 5.1.0 version of PKHUD with Swift version set to 4.2.

    Both fixes required minimal changes (just one init and one enum that got renamed).

    Reviewed by edisonlsm at 2018-09-13 17:23
  • 4. Swift 3

    Hello and thanks for this framework,

    Is there a Swift 3 branch on its way?

    I can't use it with Xcode 8 and Swift 3 beta and Cocoapods... Or couldn't find how to.

    Thanks!

    Reviewed by Tulleb at 2016-07-04 10:28
  • 5. Present the HUD over a specific view

    I have a tab bar based app. When I want to present the progress HUD I only want to block the interaction with the VC in which the user is performing an operation. I want to block the interaction with that VC, but not with the tab bar.

    I would like to be able to specify the view/vc to present the HUD on top of.

    Thanks

    Reviewed by ccarnino at 2016-04-02 17:50
  • 6. xcode 8.3 swift 3 warnings

    @pkluz there are some warnings in the latest xcode 8.3

    PKHUDAnimation.swift:19:41: 'M_PI' is deprecated: Please use 'Double.pi' or '.pi' to get the value of correct type and avoid casting.

    NSNumber(value: 1.0 * Float(M_PI) / 6.0 as Float),

    Reviewed by alexookah at 2017-03-29 09:47
  • 7. Hud Resize

    A new feature very requested is the capability of changing the size of the HUD.

    Maybe we could add a constant file, for instance the size of PKHUDSquareBaseView is 156x156 so we would have:

    enum PKHUDSize {
      static let PKHUDSquareBaseViewWidth = 156.0
      static let PKHUDSquareBaseViewHeight = 156.0
    // or even better     static let PKHUDSquareBaseViewSize = CGSize(width: 156.0, height: 156.0)
    
    }
    

    So

    static let defaultSquareBaseViewFrame = CGRect(origin: CGPoint.zero, size: CGSize(width: 156.0, height: 156.0))
    

    So

    static let defaultSquareBaseViewFrame = CGRect(origin: CGPoint.zero, size: CGSize(width: 156.0, height: 156.0))
    ....
     public init(image: UIImage? = nil, title: String? = nil, subtitle: String? = nil) {
            super.init(frame: PKHUDSquareBaseView.defaultSquareBaseViewFrame)
            ...
        }
    

    Became

    156.0))
     public init(image: UIImage? = nil, title: String? = nil, subtitle: String? = nil) {
            let frame = CGRect(origin: CGPoint.zero, size: CGSize(width: PKHUDSize.PKHUDSquareBaseViewWidth, height: PKHUDSize.PKHUDSquareBaseViewHeight)
            super.init(frame: frame)
            ...
        }
    
    Reviewed by PGLongo at 2016-12-21 22:08
  • 8. Animating Protocol is Package-Protected

    I was trying to implement a custom view (very similar to the one used by default, but at a bigger size, and some margins on the title label), however, the animation protocol is currently not public, and so I cannot implement it with my custom view. Would you be open to a pull request to fix this?

    It seems like, without the above, custom views would not work nearly as well.

    @objc protocol PKHUDAnimating {
    
        func startAnimation()
        optional func stopAnimation()
    }
    
    Reviewed by cody1024d at 2016-09-29 17:31
  • 9. Title on Error or Success

    This is a nice extension, but I find it painfully difficult to use.

    Not sure how swift works, but I don't want to type sharedHud

    I would like it to work more like this https://github.com/relatedcode/ProgressHUD

    It should be PKHUD.show("String") then PKHUD.success

    And at least give me a chance to put a title in the error for god sakes.

    Reviewed by benjaminhallock at 2015-11-13 12:33
  • 10. BlurEffect can't change Alpha

    As discussed in this pull request: https://github.com/pkluz/PKHUD/pull/5

    I'm still receiving an warning:

    2014-09-16 14:29:47.912 PKHUD Demo[50313:10503170] <PKHUD.FrameView 0x7fa053e609d0> is being asked to animate its opacity. This will cause the effect to appear broken until opacity returns to 1.
    

    It appears PKHUD is trying to animate the Alpha of the FrameView, while it's a subclass of UIVisualEffectView. The documentation of the VisualEffectView states the following:

    Setting the Correct Alpha Value
    When using the UIVisualEffectView class, avoid alpha values that are less than 1.
    Creating views that are partially transparent causes the system to combine the view 
    and all the associated subviews during an offscreen render pass. UIVisualEffectView 
    objects need to be combined as part of the content they are layered on top of in order
    to look correct. Setting the alpha to less than 1 on the visual effect view or any of its 
    superviews causes many effects to look incorrect or not show up at all.
    

    So to solve this notification, the alpha fading must be done differently.

    Any suggestions?

    Cheers, //Michael

    Reviewed by MichMich at 2014-09-16 13:15
  • 11. Crash in Xcode version 9.0 (9A235) showing PKHUDProgressView

    Xcode version 9.0 (9A235) Swift 3.2 Running on iPhone X Simulator

    Line of code executed:

    HUD.show(.labeledProgress(title: "Loading contacts...", subtitle: nil)) })

    Log of crash:

    2017-09-15 16:57:57.852845-0400 redactedAppName[31636:558237] *** Assertion failure in -[PKHUD.FrameView _addSubview:positioned:relativeTo:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3694.4.18/UIVisualEffectView.m:1464
    2017-09-15 16:57:57.880328-0400 redactedAppName[31636:558237] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<PKHUD.PKHUDProgressView: 0x7fa3a4597630; frame = (0 0; 156 156); clipsToBounds = YES; alpha = 0.85; layer = <CALayer: 0x60000042df60>> has been added as a subview to <PKHUD.FrameView: 0x7fa3a4578580; baseClass = UIVisualEffectView; frame = (0 0; 156 156); clipsToBounds = YES; autoresize = LM+RM+TM+BM; layer = <CALayer: 0x60000042a820>>. Do not add subviews directly to the visual effect view itself, instead add them to the -contentView.'
    *** First throw call stack:
    (
    	0   CoreFoundation                      0x000000011083d1cb __exceptionPreprocess + 171
    	1   libobjc.A.dylib                     0x000000010fa2cf41 objc_exception_throw + 48
    	2   CoreFoundation                      0x0000000110842362 +[NSException raise:format:arguments:] + 98
    	3   Foundation                          0x000000010bc01089 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 193
    	4   UIKit                               0x000000010ded243f -[UIVisualEffectView _addSubview:positioned:relativeTo:] + 379
    	5   PKHUD                               0x000000010d1c04a5 _T05PKHUDAAC11contentViewSo6UIViewCfsTf4gn_n + 373
    	6   PKHUD                               0x000000010d1bc06f _T05PKHUD3HUDC4showyAA14HUDContentTypeOFZ + 303
    	7   redactedAppName                           0x00000001096e6fd8 _T09redactedAppName22ContactsViewControllerC04loadC07RxSwift10ObservableCyAA0C5EventOGyFySbcfU_ + 152
    	8   redactedAppName                           0x00000001096e6ff9 _T0Sbs5Error_pIxyzo_SbsAA_pIxizo_TR + 25
    	9   redactedAppName                           0x00000001096f1df3 _T0Sbs5Error_pIxyzo_SbsAA_pIxizo_TRTA + 83
    	10  RxSwift                             0x000000010d460482 _T07RxSwift14ObservableTypePAAE2doAA0C0Cy1EQzGyAHKcSg6onNext_ys5Error_pKcSg0fH0yyKcSg0F9CompletedyycSg0F9SubscribeAQ0F7DisposetFyAA5EventOyAHGKcfU_ + 370
    	11  RxSwift                             0x000000010d460662 _T07RxSwift14ObservableTypePAAE2doAA0C0Cy1EQzGyAHKcSg6onNext_ys5Error_pKcSg0fH0yyKcSg0F9CompletedyycSg0F9SubscribeAQ0F7DisposetFyAA5EventOyAHGKcfU_TA + 162
    	12  RxSwift                             0x000000010d44e735 _T07RxSwift6DoSinkC2onyAA5EventOy1EQzGF + 277
    	13  RxSwift                             0x000000010d44eac4 _T07RxSwift6DoSinkCyxGAA12ObserverTypeA2aERzlAaEP2onyAA5EventOy1EQzGFTW + 36
    	14  RxSwift                             0x000000010d463c91 _T07RxSwift32ObserveOnSerialDispatchQueueSinkCACyxGAA0efG9SchedulerC9scheduler_x8observerAA10Cancelable_p6canceltcfcAA10Disposable_pAD_AA5EventOy1EQzGtcfU_ + 241
    	15  RxSwift                             0x000000010d464659 _T07RxSwift32ObserveOnSerialDispatchQueueSinkCACyxGAA0efG9SchedulerC9scheduler_x8observerAA10Cancelable_p6canceltcfcAA10Disposable_pAD_AA5EventOy1EQzGtcfU_TA + 9
    	16  RxSwift                             0x000000010d46470c _T07RxSwift32ObserveOnSerialDispatchQueueSinkCyxGAA5EventOy1EQzGAA10Disposable_pIxxir_AD_AItAaJ_pIxir_AA12ObserverTypeRzlTRTA + 140
    	17  RxSwift                             0x000000010d457bea _T07RxSwift13MainSchedulerC16scheduleInternalAA10Disposable_px_AaE_pxc6actiontlF + 250
    	18  RxSwift                             0x000000010d48322b _T07RxSwift28SerialDispatchQueueSchedulerC8scheduleAA10Disposable_px_AaE_pxc6actiontlF + 75
    	19  RxSwift                             0x000000010d463fb6 _T07RxSwift32ObserveOnSerialDispatchQueueSinkC6onCoreyAA5EventOy1EQzGF + 566
    	20  RxSwift                             0x000000010d4648e3 _T07RxSwift12ObserverBaseC2onyAA5EventOyxGF + 403
    	21  RxSwift                             0x000000010d464b94 _T07RxSwift12ObserverBaseCyxGAA0C4TypeAAlAaEP2onyAA5EventOy1EQzGFTW + 36
    	22  RxSwift                             0x000000010d456891 _T07RxSwift4JustC9subscribeAA10Disposable_pqd__1EQyd__RszAA12ObserverTypeRd__lF + 161
    	23  RxSwift                             0x000000010d464456 _T07RxSwift28ObserveOnSerialDispatchQueueC3runAA10Disposable_p4sink_AaE_p12subscriptiontqd___AA10Cancelable_p6cancelt1EQyd__RszAA12ObserverTypeRd__lF + 198
    	24  RxSwift                             0x000000010d467f85 _T07RxSwift8ProducerC9subscribeAA10Disposable_pqd__1EQyd__RszAA12ObserverTypeRd__lF + 389
    	25  RxSwift                             0x000000010d44ecb5 _T07RxSwift2DoC3runAA10Disposable_p4sink_AaE_p12subscriptiontqd___AA10Cancelable_p6cancelt1EQyd__RszAA12ObserverTypeRd__lF + 261
    	26  RxSwift                             0x000000010d467f85 _T07RxSwift8ProducerC9subscribeAA10Disposable_pqd__1EQyd__RszAA12ObserverTypeRd__lF + 389
    	27  RxSwift                             0x000000010d45b070 _T07RxSwift9MergeSinkC3runAA10Disposable_pAA10ObservableCyxGF + 432
    	28  RxSwift                             0x000000010d45c757 _T07RxSwift7FlatMapC3runAA10Disposable_p4sink_AaE_p12subscriptiontqd___AA10Cancelable_p6canceltAA12ObserverTypeRd__1EQyd__AKRt_lFTm + 263
    	29  RxSwift                             0x000000010d45c148 _T07RxSwift7FlatMapC3runAA10Disposable_p4sink_AaE_p12subscriptiontqd___AA10Cancelable_p6canceltAA12ObserverTypeRd__1EQyd__AKRt_lF + 24
    	30  RxSwift                             0x000000010d467f85 _T07RxSwift8ProducerC9subscribeAA10Disposable_pqd__1EQyd__RszAA12ObserverTypeRd__lF + 389
    	31  RxSwift                             0x000000010d45b070 _T07RxSwift9MergeSinkC3runAA10Disposable_pAA10ObservableCyxGF + 432
    	32  RxSwift                             0x000000010d45c757 _T07RxSwift7FlatMapC3runAA10Disposable_p4sink_AaE_p12subscriptiontqd___AA10Cancelable_p6canceltAA12ObserverTypeRd__1EQyd__AKRt_lFTm + 263
    	33  RxSwift                             0x000000010d45c148 _T07RxSwift7FlatMapC3runAA10Disposable_p4sink_AaE_p12subscriptiontqd___AA10Cancelable_p6canceltAA12ObserverTypeRd__1EQyd__AKRt_lF + 24
    	34  RxSwift                             0x000000010d467f85 _T07RxSwift8ProducerC9subscribeAA10Disposable_pqd__1EQyd__RszAA12ObserverTypeRd__lF + 389
    	35  RxSwift                             0x000000010d459132 _T07RxSwift3MapC3runAA10Disposable_p4sink_AaE_p12subscriptiontqd___AA10Cancelable_p6cancelt1EQyd__Rs_AA12ObserverTypeRd__lF + 242
    	36  RxSwift                             0x000000010d467f85 _T07RxSwift8ProducerC9subscribeAA10Disposable_pqd__1EQyd__RszAA12ObserverTypeRd__lF + 389
    	37  RxSwift                             0x000000010d425188 _T07RxSwift9CatchSinkC3runAA10Disposable_pyF + 952
    	38  RxSwift                             0x000000010d425aa4 _T07RxSwift5CatchC3runAA10Disposable_p4sink_AaE_p12subscriptiontqd___AA10Cancelable_p6cancelt1EQyd__RszAA12ObserverTypeRd__lF + 100
    	39  RxSwift                             0x000000010d467f85 _T07RxSwift8ProducerC9subscribeAA10Disposable_pqd__1EQyd__RszAA12ObserverTypeRd__lF + 389
    	40  RxSwift                             0x000000010d464456 _T07RxSwift28ObserveOnSerialDispatchQueueC3runAA10Disposable_p4sink_AaE_p12subscriptiontqd___AA10Cancelable_p6cancelt1EQyd__RszAA12ObserverTypeRd__lF + 198
    	41  RxSwift                             0x000000010d467f85 _T07RxSwift8ProducerC9subscribeAA10Disposable_pqd__1EQyd__RszAA12ObserverTypeRd__lF + 389
    	42  RxSwift                             0x000000010d44ecb5 _T07RxSwift2DoC3runAA10Disposable_p4sink_AaE_p12subscriptiontqd___AA10Cancelable_p6cancelt1EQyd__RszAA12ObserverTypeRd__lF + 261
    	43  RxSwift                             0x000000010d467f85 _T07RxSwift8ProducerC9subscribeAA10Disposable_pqd__1EQyd__RszAA12ObserverTypeRd__lF + 389
    	44  RxSwift                             0x000000010d464456 _T07RxSwift28ObserveOnSerialDispatchQueueC3runAA10Disposable_p4sink_AaE_p12subscriptiontqd___AA10Cancelable_p6cancelt1EQyd__RszAA12ObserverTypeRd__lF + 198
    	45  RxSwift                             0x000000010d4682cc _T07RxSwift8ProducerC9subscribeAA10Disposable_pqd__1EQyd__RszAA12ObserverTypeRd__lFAaE_pycfU_ + 364
    	46  RxSwift                             0x000000010d468c93 _T07RxSwift8ProducerC9subscribeAA10Disposable_pqd__1EQyd__RszAA12ObserverTypeRd__lFAaE_pycfU_TA + 83
    	47  RxSwift                             0x000000010d4407ef _T07RxSwift22CurrentThreadSchedulerC8scheduleAA10Disposable_px_AaE_pxc6actiontlFyt_Tg504_T07a7Swift10G20_pIxr_ytAaB_pIxir_TRAaE_pIxr_Tf1nncn_n + 527
    	48  RxSwift                             0x000000010d4680dd _T07RxSwift8ProducerC9subscribeAA10Disposable_pqd__1EQyd__RszAA12ObserverTypeRd__lF + 733
    	49  RxSwift                             0x000000010d461c82 _T07RxSwift14ObservableTypePAAE9subscribeAA10Disposable_py1EQzcSg6onNext_ys5Error_pcSg0gI0yycSg0G9CompletedAM0G8DisposedtF + 690
    	50  redactedAppName                           0x00000001096e1e49 _T09redactedAppName22ContactsViewControllerC04loadC15AndHandleResult33_16DC83E487ECD90299D7E27593AF19EFLLyyF + 489
    	51  redactedAppName                           0x00000001096dd17a _T09redactedAppName22ContactsViewControllerC6handleyAA0C5EventO5event_tF + 15098
    	52  redactedAppName                           0x00000001096d95e6 _T09redactedAppName22ContactsViewControllerCAcA0C5PropsV5props_tcfcySayypGcfU_ + 70
    	53  redactedAppName                           0x00000001096d967a _T09redactedAppName22ContactsViewControllerCAcA0C5PropsV5props_tcfcySayypGcfU_TA + 58
    	54  redactedAppName                           0x00000001096dd1ff _T0SayypGIxx_AAIxi_TR + 15
    	55  redactedAppName                           0x00000001096dd292 _T0SayypGIxx_AAIxi_TRTA + 66
    	56  RxSwift                             0x000000010d462078 _T07RxSwift14ObservableTypePAAE9subscribeAA10Disposable_py1EQzcSg6onNext_ys5Error_pcSg0gI0yycSg0G9CompletedAM0G8DisposedtFyAA5EventOyAGGcfU_Tf4ngggg_n + 312
    	57  RxSwift                             0x000000010d461db9 _T07RxSwift14ObservableTypePAAE9subscribeAA10Disposable_py1EQzcSg6onNext_ys5Error_pcSg0gI0yycSg0G9CompletedAM0G8DisposedtFyAA5EventOyAGGcfU_ + 57
    	58  RxSwift                             0x000000010d461f2c _T07RxSwift14ObservableTypePAAE9subscribeAA10Disposable_py1EQzcSg6onNext_ys5Error_pcSg0gI0yycSg0G9CompletedAM0G8DisposedtFyAA5EventOyAGGcfU_TA + 172
    	59  RxSwift                             0x000000010d41a277 _T07RxSwift17AnonymousObserverC6onCoreyAA5EventOyxGF + 39
    	60  RxSwift                             0x000000010d4648e3 _T07RxSwift12ObserverBaseC2onyAA5EventOyxGF + 403
    	61  RxSwift                             0x000000010d464b94 _T07RxSwift12ObserverBaseCyxGAA0C4TypeAAlAaEP2onyAA5EventOy1EQzGFTW + 36
    	62  RxSwift                             0x000000010d488168 _T07RxSwift4SinkC9forwardOnyAA5EventOy1EQzGF + 120
    	63  RxSwift                             0x000000010d492ea3 _T07RxSwift13TakeCountSinkC2onyAA5EventOy1EQzGF + 531
    	64  RxSwift                             0x000000010d4930f4 _T07RxSwift13TakeCountSinkCyxGAA12ObserverTypeA2aERzlAaEP2onyAA5EventOy1EQzGFTW + 36
    	65  RxSwift                             0x000000010d464ee2 _T0TA + 82
    	66  RxSwift                             0x000000010d41a455 _T07RxSwift11AnyObserverV2onyAA5EventOyxGF + 37
    	67  RxSwift                             0x000000010d41a4ab _T07RxSwift11AnyObserverVyxGAA0D4TypeAAlAaEP2onyAA5EventOy1EQzGFTW + 43
    	68  RxSwift                             0x000000010d41ba3c _T07RxSwift3BagVA2A12ObserverTypeRzlE2onyAA5EventOy1EQzGF + 636
    	69  RxSwift                             0x000000010d4690eb _T07RxSwift14PublishSubjectC2onyAA5EventOyxGF + 299
    	70  RxCocoa                             0x000000010d2ba588 _T07RxCocoa16MessageSentProxy33_F7515DBB13B60709A3CB25DD19EDD11DLLC13methodInvokedySayypG13withArguments_tFTo + 120
    	71  RxCocoa                             0x000000010d29b7c8 RX_forward_invocation + 236
    	72  RxCocoa                             0x000000010d29b67b __71-[RXObjCRuntime(InfrastructureMethods) swizzleForwardInvocation:error:]_block_invoke_2 + 44
    	73  CoreFoundation                      0x00000001107bfed8 ___forwarding___ + 760
    	74  CoreFoundation                      0x00000001107bfb58 _CF_forwarding_prep_0 + 120
    	75  UIKit                               0x000000010da889b0 -[UIViewController _setViewAppearState:isAnimating:] + 444
    	76  UIKit                               0x000000010da89245 -[UIViewController __viewWillAppear:] + 147
    	77  UIKit                               0x000000010dab522c -[UINavigationController _startCustomTransition:] + 1195
    	78  UIKit                               0x000000010dacb894 -[UINavigationController _startDeferredTransitionIfNeeded:] + 686
    	79  UIKit                               0x000000010daccb90 -[UINavigationController __viewWillLayoutSubviews] + 115
    	80  UIKit                               0x000000010dd232ae -[UILayoutContainerView layoutSubviews] + 231
    	81  UIKit                               0x000000010d9b3551 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1331
    	82  QuartzCore                          0x00000001117254ba -[CALayer layoutSublayers] + 153
    	83  QuartzCore                          0x00000001117295a9 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 401
    	84  QuartzCore                          0x00000001116b21cd _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 365
    	85  QuartzCore                          0x00000001116ddae4 _ZN2CA11Transaction6commitEv + 500
    	86  QuartzCore                          0x00000001116de830 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 76
    	87  CoreFoundation                      0x00000001107dfdb7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    	88  CoreFoundation                      0x00000001107dfd0e __CFRunLoopDoObservers + 430
    	89  CoreFoundation                      0x00000001107c4324 __CFRunLoopRun + 1572
    	90  CoreFoundation                      0x00000001107c3a89 CFRunLoopRunSpecific + 409
    	91  GraphicsServices                    0x00000001140339c6 GSEventRunModal + 62
    	92  UIKit                               0x000000010d8e4d30 UIApplicationMain + 159
    	93  redactedAppName                           0x000000010976e997 main + 55
    	94  libdyld.dylib                       0x00000001126b5d81 start + 1
    )
    libc++abi.dylib: terminating with uncaught exception of type NSException
    
    Reviewed by alexwillingham at 2017-09-15 21:06
  • 12. Bump cocoapods-downloader from 1.2.1 to 1.6.3

    Bumps cocoapods-downloader from 1.2.1 to 1.6.3.

    Release notes

    Sourced from cocoapods-downloader's releases.

    1.6.3

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.2

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.1

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.0

    Enhancements
    • None.
    Bug Fixes
    • Adds a check for command injections in the input for hg and git.
      orta #124

    1.5.1

    Enhancements
    • None.
    Bug Fixes
    • Fix "can't modify frozen string" errors when pods are integrated using the branch option
      buju77 #10920

    1.5.0

    ... (truncated)

    Changelog

    Sourced from cocoapods-downloader's changelog.

    1.6.3 (2022-04-01)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.2 (2022-03-28)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.1 (2022-03-23)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.0 (2022-03-22)

    Enhancements
    • None.
    Bug Fixes
    • Adds a check for command injections in the input for hg and git.
      orta #124

    1.5.1 (2021-09-07)

    Enhancements
    • None.

    ... (truncated)

    Commits
    • c03e2ed Release 1.6.3
    • f75bccc Disable Bazaar tests due to macOS 12.3 not including python2
    • 52a0d54 Merge pull request #128 from CocoaPods/validate_before_dl
    • d27c983 Ensure that the git pre-processor doesn't accidentally bail also
    • 3adfe1f [CHANGELOG] Add empty Master section
    • 591167a Release 1.6.2
    • d2564c3 Merge pull request #127 from CocoaPods/validate_before_dl
    • 99fec61 Switches where we check for invalid input, to move it inside the download fun...
    • 96679f2 [CHANGELOG] Add empty Master section
    • 3a7c54b Release 1.6.1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    Reviewed by dependabot[bot] at 2022-04-05 22:21
  • 13. PKHUD.show(onView:) is crashing with iOS 15

    Did anybody observed crash with PKHUD.show(onView:) on iOS 15?

    Can someone recommend something to resolve this crash

    Crashlogs:

    `Exception Type: EXC_BREAKPOINT (SIGTRAP) Exception Codes: 0x0000000000000001, 0x000000010264298c Exception Note: EXC_CORPSE_NOTIFY Termination Reason: SIGNAL; [5] Terminating Process: exc handler [815]

    Terminating Process: exc handler [815] Triggered by Thread: 0

    Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 PKHUD 0x10264298c PKHUD.show(onView:) + 956 1 PKHUD 0x102642678 PKHUD.show(onView:) + 168 2 PKHUD 0x102640b54 static HUD.show(:onView:) + 144 3 my_App 0x1016cb304 0x100dd8000 + 9384708 4 my_App 0x101528d48 0x100dd8000 + 7671112 5 my_App 0x101526658 0x100dd8000 + 7661144 6 my_App 0x101525d28 0x100dd8000 + 7658792 7 my_App 0x1013d7c40 0x100dd8000 + 6290496 8 my_App 0x101581b30 0x100dd8000 + 8035120 9 my_App 0x101581c7c 0x100dd8000 + 8035452 10 IntuneMAMSwift 0x108eb1664 0x108c90000 + 2233956 11 IntuneMAMSwift 0x108ca4c10 0x108c90000 + 85008 12 IntuneMAMSwift 0x108e390f0 0x108c90000 + 1741040 13 IntuneMAMSwift 0x108e38de4 0x108c90000 + 1740260 14 IntuneMAMSwift 0x108e39a24 0x108c90000 + 1743396 15 IntuneMAMSwift 0x108eae9d8 0x108c90000 + 2222552 16 IntuneMAMSwift 0x108eb0ab0 0x108c90000 + 2230960 17 ADAL 0x101dade24 __swizzle_ApplicationOpenURLiOS9 + 300 18 UIKitCore 0x18370881c __58-[UIApplication _applicationOpenURLAction:payload:origin:]block_invoke + 804 19 UIKitCore 0x1835ea1d0 -[UIApplication _applicationOpenURLAction:payload:origin:] + 892 20 UIKitCore 0x1835c58c4 -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] + 5040 21 UIKitCore 0x183566d50 -[UIScene _emitSceneSettingsUpdateResponseForCompletion:afterSceneUpdateWork:] + 496 22 UIKitCore 0x1835aa524 -[UIScene scene:didUpdateWithDiff:transitionContext:completion:] + 288 23 UIKitCore 0x183534370 -[UIApplicationSceneClientAgent scene:handleEvent:withCompletion:] + 492 24 FrontBoardServices 0x192a54100 -[FBSScene updater:didUpdateSettings:withDiff:transitionContext:completion:] + 528 25 FrontBoardServices 0x192a6cd4c __94-[FBSWorkspaceScenesClient _queue_updateScene:withSettings:diff:transitionContext:completion:]block_invoke_2 + 152 26 FrontBoardServices 0x192a516b4 -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] + 240 27 FrontBoardServices 0x192a57b10 __94-[FBSWorkspaceScenesClient _queue_updateScene:withSettings:diff:transitionContext:completion:]block_invoke + 396 28 libdispatch.dylib 0x180beb660 dispatch_client_callout + 20 29 libdispatch.dylib 0x180bef118 dispatch_block_invoke_direct + 264 30 FrontBoardServices 0x192a52f94 FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK + 48 31 FrontBoardServices 0x192a523d4 -[FBSSerialQueue _targetQueue_performNextIfPossible] + 220 32 FrontBoardServices 0x192a569e4 -[FBSSerialQueue _performNextFromRunLoopSource] + 28 33 CoreFoundation 0x180f9b020 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 28 34 CoreFoundation 0x180fabce0 __CFRunLoopDoSource0 + 208 35 CoreFoundation 0x180ee5fe8 __CFRunLoopDoSources0 + 268 36 CoreFoundation 0x180eeb7f4 __CFRunLoopRun + 820 37 CoreFoundation 0x180eff3b8 CFRunLoopRunSpecific + 600 38 GraphicsServices 0x19c88f38c GSEventRunModal + 164 39 UIKitCore 0x18389f6a8 -[UIApplication _run] + 1100 40 UIKitCore 0x18361e7f4 UIApplicationMain + 2092 41 IntuneMAMSwiftStub 0x108c7a1a8 cmarRealUIApplicationMain(::::) + 96 42 IntuneMAMSwift 0x108f17294 cmarHookedUIApplicationMain(::::) + 216 43 securelinegen2_intune 0x100eac808 0x100dd8000 + 870408 44 dyld 0x101d05a24 start + 520 `

    Reviewed by arsalangolestanekh at 2021-12-01 16:00
  • 14. Bump addressable from 2.5.2 to 2.8.0

    Bumps addressable from 2.5.2 to 2.8.0.

    Changelog

    Sourced from addressable's changelog.

    Addressable 2.8.0

    • fixes ReDoS vulnerability in Addressable::Template#match
    • no longer replaces + with spaces in queries for non-http(s) schemes
    • fixed encoding ipv6 literals
    • the :compacted flag for normalized_query now dedupes parameters
    • fix broken escape_component alias
    • dropping support for Ruby 2.0 and 2.1
    • adding Ruby 3.0 compatibility for development tasks
    • drop support for rack-mount and remove Addressable::Template#generate
    • performance improvements
    • switch CI/CD to GitHub Actions

    Addressable 2.7.0

    • added :compacted flag to normalized_query
    • heuristic_parse handles mailto: more intuitively
    • dropped explicit support for JRuby 9.0.5.0
    • compatibility w/ public_suffix 4.x
    • performance improvements

    Addressable 2.6.0

    • added tld= method to allow assignment to the public suffix
    • most heuristic_parse patterns are now case-insensitive
    • heuristic_parse handles more file:// URI variations
    • fixes bug in heuristic_parse when uri starts with digit
    • fixes bug in request_uri= with query strings
    • fixes template issues with nil and ? operator
    • frozen_string_literal pragmas added
    • minor performance improvements in regexps
    • fixes to eliminate warnings
    Commits
    • 6469a23 Updating gemspec again
    • 2433638 Merge branch 'main' of github.com:sporkmonger/addressable into main
    • e9c76b8 Merge pull request #378 from ashmaroli/flat-map
    • 56c5cf7 Update the gemspec
    • c1fed1c Require a non-vulnerable rake
    • 0d8a312 Adding note about ReDoS vulnerability
    • 89c7613 Merge branch 'template-regexp' into main
    • cf8884f Note about alias fix
    • bb03f71 Merge pull request #371 from charleystran/add_missing_encode_component_doc_entry
    • 6d1d809 Adding note about :compacted normalization
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    Reviewed by dependabot[bot] at 2021-07-12 18:17
  • 15. dimsBackground is false,but PKHUD.sharedHUD not hidden container.backgroundView

    if last show container.backgroundView, and hide animated is false, container.backgroundView not hidden.

    then dimsBackground set false, container.backgroundView hidden status not change true

    open func show(onView view: UIView? = nil) {
            let view: UIView = view ?? viewToPresentOn ?? UIApplication.shared.keyWindow!
            if  !view.subviews.contains(container) {
                view.addSubview(container)
                container.frame.origin = CGPoint.zero
                container.frame.size = view.frame.size
                container.autoresizingMask = [ .flexibleHeight, .flexibleWidth ]
                container.isHidden = true
            }
            if dimsBackground {
                container.showBackground(animated: true)
            }
    // dimsBackground == false, this not call  container.hideBackground(animated: false)
    
    Reviewed by xdkhan at 2021-02-26 03:09
Related tags
Customizable HUD for swift

HUD Customizable HUD. Requirements Installation Swift Package Manager The Swift Package Manager is a tool for automating the distribution of Swift cod

Nov 30, 2021
:hatching_chick: Lightweight Swift loading activity for iOS7+
:hatching_chick: Lightweight Swift loading activity for iOS7+

EZLoadingActivity Lightweight Swift loading activity for iOS7+. Really simple to use, just add the class and write 1 line of code. Easy to use: EZLoad

Apr 22, 2022
A modern HUD inspired by Apple Music and Apple Podcasts
A modern HUD inspired by Apple Music and Apple Podcasts

HUD A modern HUD inspired by Apple Music and Apple Podcasts. Appearance Light Dark HUD Activity Indicator HUD Requirements iOS 13+ Installation You ca

Sep 1, 2021
McPicker is a customizable, closure driven UIPickerView drop-in solution with animations that is rotation ready.
McPicker is a customizable, closure driven UIPickerView drop-in solution with animations that is rotation ready.

McPicker About McPicker is a UIPickerView drop-in solution with animations that is rotation ready. The more string arrays you pass, the more picker co

May 8, 2022
A custom-designed reimplementation of the UIActionSheet control for iOS
A custom-designed reimplementation of the UIActionSheet control for iOS

TOActionSheet TOActionSheet is an iOS UI control providing a modal prompt control, similar to UIActionSheet. Unlike UIActionSheet, it can be very heav

Feb 16, 2022
Reimplementation of the famous screen saver
Reimplementation of the famous screen saver

Padbury Clock Revived The Padbury Clock is a minimalist screensaver created by Robert Padbury. It has not been updated in ages and actually broke for

May 4, 2022
DevToys for iPad - a SwiftUI reimplementation of DevToys, a Swiss Army Knife for developers, for iPadOS
DevToys for iPad - a SwiftUI reimplementation of DevToys, a Swiss Army Knife for developers, for iPadOS

DevToys for iPad - a SwiftUI reimplementation of DevToys, a Swiss Army Knife for developers, for iPadOS

May 7, 2022
A clean and lightweight progress HUD based on SVProgressHUD, converted to Swift with the help of Swiftify.

IHProgressHUD IHProgressHUD is a clean and easy-to-use HUD meant to display the progress of an ongoing task on iOS and tvOS. IHProgressHUD is based on

Apr 8, 2022
🕳 A simple command line tool to punch hole to reduce disk usage on APFS volume for such as a raw disk image.

HolePunch NAME holepunch -- A simple command line tool to punch hole to reduce disk usage on APFS volume for such as a raw disk image. SYNOPSIS holepu

Jan 5, 2022
Volume knob for Beoplay speakers
Volume knob for Beoplay speakers

Knob Volume knob for Beoplay speakers. The app communicates with the Beoplay speaker over WiFi. Tested with a Beoplay A6. Features It's really just a

May 16, 2022
Adjust the volume from the command line on macOS.

volume Adjust the volume from the command line on macOS. Installation Using Mint: mint install meowmeowmeowcat/[email protected] Usage USAGE: volume <numb

Apr 21, 2022
Replace the system volume popup with a more subtle indicator.
Replace the system volume popup with a more subtle indicator.

Replace the volume popup with a more subtle way to display the volume when the user changes it with the volume rocker. Why and how The iOS default pop

Apr 13, 2022
Successor of iTunes Volume Control
Successor of iTunes Volume Control

Volume Control (for Apple Music and Spotify) Description This app allows you to directly control the volume of Apple Music and of Spotify using volume

May 18, 2022
VolumeControl is a custom volume control for iPhone featuring a well-designed round slider.
VolumeControl is a custom volume control for iPhone featuring a well-designed round slider.

#VolumeControl VolumeControl is a custom volume control for iPhone featuring a well-designed round slider. Preview Usage // Include VolumeControl.h in

Dec 25, 2021
A beautiful and easy-to-use progress HUD for your iOS.
A beautiful and easy-to-use progress HUD for your iOS.

日本語 KRProgressHUD is a beautiful and easy-to-use progress HUD for your iOS written by Swift. KRActivityIndicatorView is used for loading view. Feature

May 16, 2022
TTProgressHUD is a light weight HUD written in SwiftUI meant to display the progress of an ongoing task on iOS.
TTProgressHUD is a light weight HUD written in SwiftUI meant to display the progress of an ongoing task on iOS.

TTProgressHUD TTProgressHUD is a light weight HUD written in SwiftUI meant to display the progress of an ongoing task on iOS. TTProgressHUD (left) was

May 2, 2022
GUI library for displaying various popups (HUD), written in pure Swift.
 GUI library for displaying various popups (HUD), written in pure Swift.

SwiftNotice SwiftNotice is a GUI library for displaying various popups (HUD) written in pure Swift, fits any scrollview and supports iPhone X. Feature

Apr 21, 2022
Customizable HUD for swift

HUD Customizable HUD. Requirements Installation Swift Package Manager The Swift Package Manager is a tool for automating the distribution of Swift cod

Nov 30, 2021
Simple Swift Progress HUD

MKProgress An iOS Simple Swift Progress HUD Requirements iOS 9.0+ Swift 3.0+ Xcode 8.0+ Installation MKProgress is only available via CocoaPods: pod '

Apr 6, 2022
This is a beauful hud view for iPhone & iPad
This is a beauful hud view for iPhone & iPad

WSProgressHUD This is a beauful hud view for iPhone & iPad Usage To Download the project. Run the WSProgressHUD.xcodeproj in the demo directory. [

May 1, 2022