This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
class HapticHelper { | |
enum HapticType { | |
case impactLight | |
case impactMedium | |
case impactHeavy | |
case selectionChange | |
case notificationSuccess | |
case notificationError |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MTCustomPresentationController: UIPresentationController { | |
let cornerRadius: CGFloat = 16.0 | |
var dimmingView: UIView? | |
var presentationWrappingView: UIView? | |
override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) { | |
super.init(presentedViewController: presentedViewController, presenting: presentingViewController) | |
presentedViewController.modalPresentationStyle = .custom | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 1. Convert the .cer file into a .pem file: | |
$ openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem | |
# 2. Convert the private key’s .p12 file into a .pem file: | |
$ openssl pkcs12 -nocerts -in PushChatKey.p12 -out PushChatKey.pem | |
# 3. Finally, combine the certificate and key into a single .pem file | |
$ cat PushChatCert.pem PushChatKey.pem > ck.pem | |
# 4. At this point it’s a good idea to test whether the certificate works. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app | |
if [ "$CONFIGURATION" == "Release" ]; then | |
rm -Rf $BUILD_APP_DIR/Settings.bundle | |
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@propertyWrapper | |
struct Trimmed { | |
private(set) var value: String? | |
var wrappedValue: String? { | |
get { | |
return value | |
} | |
set { | |
value = newValue?.trimmingCharacters(in: .whitespacesAndNewlines) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension UITableView { | |
func setEmptyMessage(_ message: String) { | |
let messageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.bounds.size.width, height: self.bounds.size.height)) | |
messageLabel.text = message | |
messageLabel.textColor = .black | |
messageLabel.numberOfLines = 0; | |
messageLabel.textAlignment = .center; | |
messageLabel.font = UIFont.preferredFont(forTextStyle: .title3) | |
messageLabel.sizeToFit() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private var __maxLengthsForTextView = [UITextView: Int]() | |
private var kAssociationKeyMaxLengthTextView: Int = 0 | |
extension UITextView:UITextViewDelegate { | |
@IBInspectable var maxLength: Int { | |
get { | |
if let length = objc_getAssociatedObject(self, &kAssociationKeyMaxLengthTextView) as? Int { | |
return length | |
} else { | |
return Int.max |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private var __maxLengthsForTextField = [UITextField: Int]() | |
extension UITextField { | |
//https://stackoverflow.com/a/43099816/3110026 | |
@IBInspectable var maxLength: Int { | |
get { | |
guard let l = __maxLengthsForTextField[self] else { | |
return 150 // (global default-limit. or just, Int.max) | |
} | |
return l | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MyView: UIView { | |
override init(frame: CGRect) { | |
super.init(frame: frame) | |
fromNib() | |
} | |
init() { | |
super.init(frame: CGRect.zero) | |
fromNib() | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@propertyWrapper | |
struct UserDefault<T> { | |
let key: String | |
let defaultValue: T | |
init(_ key: String, defaultValue: T) { | |
self.key = key | |
self.defaultValue = defaultValue | |
} |