=4.2)
+ private var _animationCurve : UIView.AnimationOptions = .curveEaseOut
+ #else
+ private var _animationCurve : UIViewAnimationOptions = .curveEaseOut
+ #endif
+
+ /*******************************************/
+
+ /** Boolean to maintain keyboard is showing or it is hide. To solve rootViewController.view.frame calculations. */
+ private var _privateIsKeyboardShowing = false
+
+ private var _privateMovedDistance : CGFloat = 0.0
+
+ /** To use with keyboardDistanceFromTextField. */
+ private var _privateKeyboardDistanceFromTextField: CGFloat = 10.0
+
+ /** To know if we have any pending request to adjust view position. */
+ private var _privateHasPendingAdjustRequest = false
+
+ /**************************************************************************************/
+
+ ///--------------------------------------
+ /// MARK: Initialization/Deinitialization
+ ///--------------------------------------
+
+ /* Singleton Object Initialization. */
+ override init() {
+
+ super.init()
+
+ self.registerAllNotifications()
+
+ //Creating gesture for @shouldResignOnTouchOutside. (Enhancement ID: #14)
+ resignFirstResponderGesture.isEnabled = shouldResignOnTouchOutside
+
+ //Loading IQToolbar, IQTitleBarButtonItem, IQBarButtonItem to fix first time keyboard appearance delay (Bug ID: #550)
+ //If you experience exception breakpoint issue at below line then try these solutions https://stackoverflow.com/questions/27375640/all-exception-break-point-is-stopping-for-no-reason-on-simulator
+ let textField = UITextField()
+ textField.addDoneOnKeyboardWithTarget(nil, action: #selector(self.doneAction(_:)))
+ textField.addPreviousNextDoneOnKeyboardWithTarget(nil, previousAction: #selector(self.previousAction(_:)), nextAction: #selector(self.nextAction(_:)), doneAction: #selector(self.doneAction(_:)))
+
+ disabledDistanceHandlingClasses.append(UITableViewController.self)
+ disabledDistanceHandlingClasses.append(UIAlertController.self)
+ disabledToolbarClasses.append(UIAlertController.self)
+ disabledTouchResignedClasses.append(UIAlertController.self)
+ toolbarPreviousNextAllowedClasses.append(UITableView.self)
+ toolbarPreviousNextAllowedClasses.append(UICollectionView.self)
+ toolbarPreviousNextAllowedClasses.append(IQPreviousNextView.self)
+ touchResignedGestureIgnoreClasses.append(UIControl.self)
+ touchResignedGestureIgnoreClasses.append(UINavigationBar.self)
+ }
+
+ /** Override +load method to enable KeyboardManager when class loader load IQKeyboardManager. Enabling when app starts (No need to write any code) */
+ /** It doesn't work from Swift 1.2 */
+// override public class func load() {
+// super.load()
+//
+// //Enabling IQKeyboardManager.
+// IQKeyboardManager.shared.enable = true
+// }
+
+ deinit {
+ // Disable the keyboard manager.
+ enable = false
+
+ //Removing notification observers on dealloc.
+ NotificationCenter.default.removeObserver(self)
+ }
+
+ /** Getting keyWindow. */
+ private func keyWindow() -> UIWindow? {
+
+ if let keyWindow = _textFieldView?.window {
+ return keyWindow
+ } else {
+
+ struct Static {
+ /** @abstract Save keyWindow object for reuse.
+ @discussion Sometimes [[UIApplication sharedApplication] keyWindow] is returning nil between the app. */
+ static weak var keyWindow : UIWindow?
+ }
+
+ //If original key window is not nil and the cached keywindow is also not original keywindow then changing keywindow.
+ if let originalKeyWindow = UIApplication.shared.keyWindow,
+ (Static.keyWindow == nil || Static.keyWindow != originalKeyWindow) {
+ Static.keyWindow = originalKeyWindow
+ }
+
+ //Return KeyWindow
+ return Static.keyWindow
+ }
+ }
+
+ ///-----------------------
+ /// MARK: Helper Functions
+ ///-----------------------
+
+ private func optimizedAdjustPosition() {
+ if _privateHasPendingAdjustRequest == false {
+ _privateHasPendingAdjustRequest = true
+ OperationQueue.main.addOperation {
+ self.adjustPosition()
+ self._privateHasPendingAdjustRequest = false
+ }
+ }
+ }
+
+ /* Adjusting RootViewController's frame according to interface orientation. */
+ private func adjustPosition() {
+
+ // We are unable to get textField object while keyboard showing on UIWebView's textField. (Bug ID: #11)
+ if _privateHasPendingAdjustRequest == true,
+ let textFieldView = _textFieldView,
+ let rootController = textFieldView.parentContainerViewController(),
+ let window = keyWindow(),
+ let textFieldViewRectInWindow = textFieldView.superview?.convert(textFieldView.frame, to: window),
+ let textFieldViewRectInRootSuperview = textFieldView.superview?.convert(textFieldView.frame, to: rootController.view?.superview)
+ {
+ let startTime = CACurrentMediaTime()
+ showLog("****** \(#function) started ******")
+
+ // Getting RootViewOrigin.
+ var rootViewOrigin = rootController.view.frame.origin
+
+ //Maintain keyboardDistanceFromTextField
+ var specialKeyboardDistanceFromTextField = textFieldView.keyboardDistanceFromTextField
+
+ if let searchBar = textFieldView.textFieldSearchBar() {
+
+ specialKeyboardDistanceFromTextField = searchBar.keyboardDistanceFromTextField
+ }
+
+ let newKeyboardDistanceFromTextField = (specialKeyboardDistanceFromTextField == kIQUseDefaultKeyboardDistance) ? keyboardDistanceFromTextField : specialKeyboardDistanceFromTextField
+ var kbSize = _kbSize
+ kbSize.height += newKeyboardDistanceFromTextField
+
+ let navigationBarAreaHeight : CGFloat = UIApplication.shared.statusBarFrame.height + ( rootController.navigationController?.navigationBar.frame.height ?? 0)
+ let layoutAreaHeight : CGFloat = rootController.view.layoutMargins.bottom
+
+ let topLayoutGuide : CGFloat = max(navigationBarAreaHeight, layoutAreaHeight) + 5
+ let bottomLayoutGuide : CGFloat = (textFieldView is UITextView) ? 0 : rootController.view.layoutMargins.bottom //Validation of textView for case where there is a tab bar at the bottom or running on iPhone X and textView is at the bottom.
+
+ // Move positive = textField is hidden.
+ // Move negative = textField is showing.
+ // Calculating move position.
+ var move : CGFloat = min(textFieldViewRectInRootSuperview.minY-(topLayoutGuide), textFieldViewRectInWindow.maxY-(window.frame.height-kbSize.height)+bottomLayoutGuide)
+
+ showLog("Need to move: \(move)")
+
+ var superScrollView : UIScrollView? = nil
+ var superView = textFieldView.superviewOfClassType(UIScrollView.self) as? UIScrollView
+
+ //Getting UIScrollView whose scrolling is enabled. // (Bug ID: #285)
+ while let view = superView {
+
+ if (view.isScrollEnabled && view.shouldIgnoreScrollingAdjustment == false) {
+ superScrollView = view
+ break
+ }
+ else {
+ // Getting it's superScrollView. // (Enhancement ID: #21, #24)
+ superView = view.superviewOfClassType(UIScrollView.self) as? UIScrollView
+ }
+ }
+
+ //If there was a lastScrollView. // (Bug ID: #34)
+ if let lastScrollView = _lastScrollView {
+ //If we can't find current superScrollView, then setting lastScrollView to it's original form.
+ if superScrollView == nil {
+
+ showLog("Restoring \(lastScrollView._IQDescription()) contentInset to : \(_startingContentInsets) and contentOffset to : \(_startingContentOffset)")
+
+ UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in
+
+ lastScrollView.contentInset = self._startingContentInsets
+ lastScrollView.scrollIndicatorInsets = self._startingScrollIndicatorInsets
+ }) { (animated:Bool) -> Void in }
+
+ if lastScrollView.shouldRestoreScrollViewContentOffset == true {
+ lastScrollView.setContentOffset(_startingContentOffset, animated: UIView.areAnimationsEnabled)
+ }
+
+ _startingContentInsets = UIEdgeInsets()
+ _startingScrollIndicatorInsets = UIEdgeInsets()
+ _startingContentOffset = CGPoint.zero
+ _lastScrollView = nil
+ } else if superScrollView != lastScrollView { //If both scrollView's are different, then reset lastScrollView to it's original frame and setting current scrollView as last scrollView.
+
+ showLog("Restoring \(lastScrollView._IQDescription()) contentInset to : \(_startingContentInsets) and contentOffset to : \(_startingContentOffset)")
+
+ UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in
+
+ lastScrollView.contentInset = self._startingContentInsets
+ lastScrollView.scrollIndicatorInsets = self._startingScrollIndicatorInsets
+ }) { (animated:Bool) -> Void in }
+
+ if lastScrollView.shouldRestoreScrollViewContentOffset == true {
+ lastScrollView.setContentOffset(_startingContentOffset, animated: UIView.areAnimationsEnabled)
+ }
+
+ _lastScrollView = superScrollView
+ if let scrollView = superScrollView {
+ _startingContentInsets = scrollView.contentInset
+ _startingScrollIndicatorInsets = scrollView.scrollIndicatorInsets
+ _startingContentOffset = scrollView.contentOffset
+ }
+
+ showLog("Saving New \(lastScrollView._IQDescription()) contentInset : \(_startingContentInsets) and contentOffset : \(_startingContentOffset)")
+ }
+ //Else the case where superScrollView == lastScrollView means we are on same scrollView after switching to different textField. So doing nothing, going ahead
+ } else if let unwrappedSuperScrollView = superScrollView { //If there was no lastScrollView and we found a current scrollView. then setting it as lastScrollView.
+ _lastScrollView = unwrappedSuperScrollView
+ _startingContentInsets = unwrappedSuperScrollView.contentInset
+ _startingScrollIndicatorInsets = unwrappedSuperScrollView.scrollIndicatorInsets
+ _startingContentOffset = unwrappedSuperScrollView.contentOffset
+
+ showLog("Saving \(unwrappedSuperScrollView._IQDescription()) contentInset : \(_startingContentInsets) and contentOffset : \(_startingContentOffset)")
+ }
+
+ // Special case for ScrollView.
+ // If we found lastScrollView then setting it's contentOffset to show textField.
+ if let lastScrollView = _lastScrollView {
+ //Saving
+ var lastView = textFieldView
+ var superScrollView = _lastScrollView
+
+ while let scrollView = superScrollView {
+
+ //Looping in upper hierarchy until we don't found any scrollView in it's upper hirarchy till UIWindow object.
+ if move > 0 ? (move > (-scrollView.contentOffset.y - scrollView.contentInset.top)) : scrollView.contentOffset.y>0 {
+
+ var tempScrollView = scrollView.superviewOfClassType(UIScrollView.self) as? UIScrollView
+ var nextScrollView : UIScrollView? = nil
+ while let view = tempScrollView {
+
+ if (view.isScrollEnabled && view.shouldIgnoreScrollingAdjustment == false) {
+ nextScrollView = view
+ break
+ } else {
+ tempScrollView = view.superviewOfClassType(UIScrollView.self) as? UIScrollView
+ }
+ }
+
+ //Getting lastViewRect.
+ if let lastViewRect = lastView.superview?.convert(lastView.frame, to: scrollView) {
+
+ //Calculating the expected Y offset from move and scrollView's contentOffset.
+ var shouldOffsetY = scrollView.contentOffset.y - min(scrollView.contentOffset.y,-move)
+
+ //Rearranging the expected Y offset according to the view.
+ shouldOffsetY = min(shouldOffsetY, lastViewRect.origin.y)
+
+ //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type
+ //nextScrollView == nil If processing scrollView is last scrollView in upper hierarchy (there is no other scrollView upper hierrchy.)
+ //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type
+ //shouldOffsetY >= 0 shouldOffsetY must be greater than in order to keep distance from navigationBar (Bug ID: #92)
+ if textFieldView is UITextView == true &&
+ nextScrollView == nil &&
+ shouldOffsetY >= 0 {
+
+ // Converting Rectangle according to window bounds.
+ if let currentTextFieldViewRect = textFieldView.superview?.convert(textFieldView.frame, to: window) {
+
+ //Calculating expected fix distance which needs to be managed from navigation bar
+ let expectedFixDistance = currentTextFieldViewRect.minY - topLayoutGuide
+
+ //Now if expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) is lower than current shouldOffsetY, which means we're in a position where navigationBar up and hide, then reducing shouldOffsetY with expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance)
+ shouldOffsetY = min(shouldOffsetY, scrollView.contentOffset.y + expectedFixDistance)
+
+ //Setting move to 0 because now we don't want to move any view anymore (All will be managed by our contentInset logic.
+ move = 0
+ }
+ else {
+ //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY.
+ move -= (shouldOffsetY-scrollView.contentOffset.y)
+ }
+ }
+ else
+ {
+ //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY.
+ move -= (shouldOffsetY-scrollView.contentOffset.y)
+ }
+
+ //Getting problem while using `setContentOffset:animated:`, So I used animation API.
+ UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in
+
+ self.showLog("Adjusting \(scrollView.contentOffset.y-shouldOffsetY) to \(scrollView._IQDescription()) ContentOffset")
+
+ self.showLog("Remaining Move: \(move)")
+
+ scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: shouldOffsetY)
+ }) { (animated:Bool) -> Void in }
+ }
+
+ // Getting next lastView & superScrollView.
+ lastView = scrollView
+ superScrollView = nextScrollView
+ } else {
+ break
+ }
+ }
+
+ //Updating contentInset
+ if let lastScrollViewRect = lastScrollView.superview?.convert(lastScrollView.frame, to: window) {
+
+ let bottom : CGFloat = (kbSize.height-newKeyboardDistanceFromTextField)-(window.frame.height-lastScrollViewRect.maxY)
+
+ // Update the insets so that the scroll vew doesn't shift incorrectly when the offset is near the bottom of the scroll view.
+ var movedInsets = lastScrollView.contentInset
+
+ movedInsets.bottom = max(_startingContentInsets.bottom, bottom)
+
+ showLog("\(lastScrollView._IQDescription()) old ContentInset : \(lastScrollView.contentInset)")
+
+ //Getting problem while using `setContentOffset:animated:`, So I used animation API.
+ UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in
+ lastScrollView.contentInset = movedInsets
+
+ var newInset = lastScrollView.scrollIndicatorInsets
+ newInset.bottom = movedInsets.bottom
+ lastScrollView.scrollIndicatorInsets = newInset
+
+ }) { (animated:Bool) -> Void in }
+
+ showLog("\(lastScrollView._IQDescription()) new ContentInset : \(lastScrollView.contentInset)")
+ }
+ }
+ //Going ahead. No else if.
+
+ //Special case for UITextView(Readjusting textView.contentInset when textView hight is too big to fit on screen)
+ //_lastScrollView If not having inside any scrollView, (now contentInset manages the full screen textView.
+ //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type
+ if let textView = textFieldView as? UITextView {
+
+// CGRect rootSuperViewFrameInWindow = [_rootViewController.view.superview convertRect:_rootViewController.view.superview.bounds toView:keyWindow];
+//
+// CGFloat keyboardOverlapping = CGRectGetMaxY(rootSuperViewFrameInWindow) - keyboardYPosition;
+//
+// CGFloat textViewHeight = MIN(CGRectGetHeight(_textFieldView.frame), (CGRectGetHeight(rootSuperViewFrameInWindow)-topLayoutGuide-keyboardOverlapping));
+
+ let keyboardYPosition = window.frame.height - (kbSize.height-newKeyboardDistanceFromTextField)
+ var rootSuperViewFrameInWindow = window.frame
+ if let rootSuperview = rootController.view.superview {
+ rootSuperViewFrameInWindow = rootSuperview.convert(rootSuperview.bounds, to: window)
+ }
+
+ let keyboardOverlapping = rootSuperViewFrameInWindow.maxY - keyboardYPosition
+
+ let textViewHeight = min(textView.frame.height, rootSuperViewFrameInWindow.height-topLayoutGuide-keyboardOverlapping)
+
+ if (textView.frame.size.height-textView.contentInset.bottom>textViewHeight)
+ {
+ UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in
+
+ self.showLog("\(textFieldView._IQDescription()) Old UITextView.contentInset : \(textView.contentInset)")
+
+ //_isTextViewContentInsetChanged, If frame is not change by library in past, then saving user textView properties (Bug ID: #92)
+ if (self.isTextViewContentInsetChanged == false)
+ {
+ self.startingTextViewContentInsets = textView.contentInset
+ self.startingTextViewScrollIndicatorInsets = textView.scrollIndicatorInsets
+ }
+
+ var newContentInset = textView.contentInset
+ newContentInset.bottom = textView.frame.size.height-textViewHeight
+ textView.contentInset = newContentInset
+ textView.scrollIndicatorInsets = newContentInset
+ self.isTextViewContentInsetChanged = true
+
+ self.showLog("\(textFieldView._IQDescription()) Old UITextView.contentInset : \(textView.contentInset)")
+
+
+ }, completion: { (finished) -> Void in })
+ }
+ }
+
+ // +Positive or zero.
+ if move >= 0 {
+
+ rootViewOrigin.y -= move
+
+ rootViewOrigin.y = max(rootViewOrigin.y, min(0, -(kbSize.height-newKeyboardDistanceFromTextField)))
+
+ showLog("Moving Upward")
+ // Setting adjusted rootViewRect
+
+ UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in
+
+ var rect = rootController.view.frame
+ rect.origin = rootViewOrigin
+ rootController.view.frame = rect
+
+ //Animating content if needed (Bug ID: #204)
+ if self.layoutIfNeededOnUpdate == true {
+ //Animating content (Bug ID: #160)
+ rootController.view.setNeedsLayout()
+ rootController.view.layoutIfNeeded()
+ }
+
+ self.showLog("Set \(String(describing: rootController._IQDescription())) origin to : \(rootViewOrigin)")
+
+ }) { (finished) -> Void in }
+
+ _privateMovedDistance = (_topViewBeginOrigin.y-rootViewOrigin.y)
+ } else { // -Negative
+ let disturbDistance : CGFloat = rootViewOrigin.y-_topViewBeginOrigin.y
+
+ // disturbDistance Negative = frame disturbed.
+ // disturbDistance positive = frame not disturbed.
+ if disturbDistance <= 0 {
+
+ rootViewOrigin.y -= max(move, disturbDistance)
+
+ showLog("Moving Downward")
+ // Setting adjusted rootViewRect
+ // Setting adjusted rootViewRect
+
+ UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in
+
+ var rect = rootController.view.frame
+ rect.origin = rootViewOrigin
+ rootController.view.frame = rect
+
+ //Animating content if needed (Bug ID: #204)
+ if self.layoutIfNeededOnUpdate == true {
+ //Animating content (Bug ID: #160)
+ rootController.view.setNeedsLayout()
+ rootController.view.layoutIfNeeded()
+ }
+
+ self.showLog("Set \(String(describing: rootController._IQDescription())) origin to : \(rootViewOrigin)")
+
+ }) { (finished) -> Void in }
+
+ _privateMovedDistance = (_topViewBeginOrigin.y-rootViewOrigin.y)
+ }
+ }
+
+ let elapsedTime = CACurrentMediaTime() - startTime
+ showLog("****** \(#function) ended: \(elapsedTime) seconds ******\n")
+ }
+ }
+
+ private func restorePosition() {
+
+ _privateHasPendingAdjustRequest = false
+
+ // Setting rootViewController frame to it's original position. // (Bug ID: #18)
+ if _topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) == false {
+
+ if let rootViewController = _rootViewController {
+
+ //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations.
+ UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in
+
+ self.showLog("Restoring \(rootViewController._IQDescription()) origin to : \(self._topViewBeginOrigin)")
+
+ // Setting it's new frame
+ var rect = rootViewController.view.frame
+ rect.origin = self._topViewBeginOrigin
+ rootViewController.view.frame = rect
+
+ self._privateMovedDistance = 0
+
+ if rootViewController.navigationController?.interactivePopGestureRecognizer?.state == .began {
+ self._rootViewControllerWhilePopGestureRecognizerActive = rootViewController
+ self._topViewBeginOriginWhilePopGestureRecognizerActive = self._topViewBeginOrigin
+ }
+
+ //Animating content if needed (Bug ID: #204)
+ if self.layoutIfNeededOnUpdate == true {
+ //Animating content (Bug ID: #160)
+ rootViewController.view.setNeedsLayout()
+ rootViewController.view.layoutIfNeeded()
+ }
+ }) { (finished) -> Void in }
+
+ _rootViewController = nil
+ }
+ }
+ }
+
+ ///---------------------
+ /// MARK: Public Methods
+ ///---------------------
+
+ /* Refreshes textField/textView position if any external changes is explicitly made by user. */
+ @objc public func reloadLayoutIfNeeded() -> Void {
+
+ if privateIsEnabled() == true {
+ if _privateIsKeyboardShowing == true,
+ _topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) == false,
+ let textFieldView = _textFieldView,
+ textFieldView.isAlertViewTextField() == false {
+ optimizedAdjustPosition()
+ }
+ }
+ }
+
+ ///-------------------------------
+ /// MARK: UIKeyboard Notifications
+ ///-------------------------------
+
+ /* UIKeyboardWillShowNotification. */
+ @objc internal func keyboardWillShow(_ notification : Notification?) -> Void {
+
+ _kbShowNotification = notification
+
+ // Boolean to know keyboard is showing/hiding
+ _privateIsKeyboardShowing = true
+
+ let oldKBSize = _kbSize
+
+ if let info = notification?.userInfo {
+
+ #if swift(>=4.2)
+ let curveUserInfoKey = UIResponder.keyboardAnimationCurveUserInfoKey
+ let durationUserInfoKey = UIResponder.keyboardAnimationDurationUserInfoKey
+ let frameEndUserInfoKey = UIResponder.keyboardFrameEndUserInfoKey
+ #else
+ let curveUserInfoKey = UIKeyboardAnimationCurveUserInfoKey
+ let durationUserInfoKey = UIKeyboardAnimationDurationUserInfoKey
+ let frameEndUserInfoKey = UIKeyboardFrameEndUserInfoKey
+ #endif
+
+ // Getting keyboard animation.
+ if let curve = info[curveUserInfoKey] as? UInt {
+ _animationCurve = .init(rawValue: curve)
+ } else {
+ _animationCurve = .curveEaseOut
+ }
+
+ // Getting keyboard animation duration
+ if let duration = info[durationUserInfoKey] as? TimeInterval {
+
+ //Saving animation duration
+ if duration != 0.0 {
+ _animationDuration = duration
+ }
+ } else {
+ _animationDuration = 0.25
+ }
+
+ // Getting UIKeyboardSize.
+ if let kbFrame = info[frameEndUserInfoKey] as? CGRect {
+
+ let screenSize = UIScreen.main.bounds
+
+ //Calculating actual keyboard displayed size, keyboard frame may be different when hardware keyboard is attached (Bug ID: #469) (Bug ID: #381)
+ let intersectRect = kbFrame.intersection(screenSize)
+
+ if intersectRect.isNull {
+ _kbSize = CGSize(width: screenSize.size.width, height: 0)
+ } else {
+ _kbSize = intersectRect.size
+ }
+
+ showLog("UIKeyboard Size : \(_kbSize)")
+ }
+ }
+
+ if privateIsEnabled() == false {
+ return
+ }
+
+ let startTime = CACurrentMediaTime()
+ showLog("****** \(#function) started ******")
+
+ // (Bug ID: #5)
+ if let textFieldView = _textFieldView, _topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) == true {
+
+ // keyboard is not showing(At the beginning only). We should save rootViewRect.
+ _rootViewController = textFieldView.parentContainerViewController()
+ if let controller = _rootViewController {
+
+ if _rootViewControllerWhilePopGestureRecognizerActive == controller {
+ _topViewBeginOrigin = _topViewBeginOriginWhilePopGestureRecognizerActive
+ } else {
+ _topViewBeginOrigin = controller.view.frame.origin
+ }
+
+ _rootViewControllerWhilePopGestureRecognizerActive = nil
+ _topViewBeginOriginWhilePopGestureRecognizerActive = IQKeyboardManager.kIQCGPointInvalid
+
+ self.showLog("Saving \(controller._IQDescription()) beginning origin : \(self._topViewBeginOrigin)")
+ }
+ }
+
+ //If last restored keyboard size is different(any orientation accure), then refresh. otherwise not.
+ if _kbSize.equalTo(oldKBSize) == false {
+
+ //If _textFieldView is inside UITableViewController then let UITableViewController to handle it (Bug ID: #37) (Bug ID: #76) See note:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70).
+
+ if _privateIsKeyboardShowing == true,
+ let textFieldView = _textFieldView,
+ textFieldView.isAlertViewTextField() == false {
+
+ // keyboard is already showing. adjust position.
+ optimizedAdjustPosition()
+ }
+ }
+
+ let elapsedTime = CACurrentMediaTime() - startTime
+ showLog("****** \(#function) ended: \(elapsedTime) seconds ******\n")
+ }
+
+ /* UIKeyboardDidShowNotification. */
+ @objc internal func keyboardDidShow(_ notification : Notification?) -> Void {
+
+ if privateIsEnabled() == false {
+ return
+ }
+
+ let startTime = CACurrentMediaTime()
+ showLog("****** \(#function) started ******")
+
+ if let textFieldView = _textFieldView,
+ let parentController = textFieldView.parentContainerViewController(), (parentController.modalPresentationStyle == UIModalPresentationStyle.formSheet || parentController.modalPresentationStyle == UIModalPresentationStyle.pageSheet),
+ textFieldView.isAlertViewTextField() == false {
+
+ self.optimizedAdjustPosition()
+ }
+
+ let elapsedTime = CACurrentMediaTime() - startTime
+ showLog("****** \(#function) ended: \(elapsedTime) seconds ******\n")
+ }
+
+ /* UIKeyboardWillHideNotification. So setting rootViewController to it's default frame. */
+ @objc internal func keyboardWillHide(_ notification : Notification?) -> Void {
+
+ //If it's not a fake notification generated by [self setEnable:NO].
+ if notification != nil {
+ _kbShowNotification = nil
+ }
+
+ // Boolean to know keyboard is showing/hiding
+ _privateIsKeyboardShowing = false
+
+ if let info = notification?.userInfo {
+
+ #if swift(>=4.2)
+ let durationUserInfoKey = UIResponder.keyboardAnimationDurationUserInfoKey
+ #else
+ let durationUserInfoKey = UIKeyboardAnimationDurationUserInfoKey
+ #endif
+
+ // Getting keyboard animation duration
+ if let duration = info[durationUserInfoKey] as? TimeInterval {
+ if duration != 0 {
+ // Setitng keyboard animation duration
+ _animationDuration = duration
+ }
+ }
+ }
+
+ //If not enabled then do nothing.
+ if privateIsEnabled() == false {
+ return
+ }
+
+ let startTime = CACurrentMediaTime()
+ showLog("****** \(#function) started ******")
+
+ //Commented due to #56. Added all the conditions below to handle UIWebView's textFields. (Bug ID: #56)
+ // We are unable to get textField object while keyboard showing on UIWebView's textField. (Bug ID: #11)
+ // if (_textFieldView == nil) return
+
+ //Restoring the contentOffset of the lastScrollView
+ if let lastScrollView = _lastScrollView {
+
+ UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in
+
+ lastScrollView.contentInset = self._startingContentInsets
+ lastScrollView.scrollIndicatorInsets = self._startingScrollIndicatorInsets
+
+ if lastScrollView.shouldRestoreScrollViewContentOffset == true {
+ lastScrollView.contentOffset = self._startingContentOffset
+ }
+
+ self.showLog("Restoring \(lastScrollView._IQDescription()) contentInset to : \(self._startingContentInsets) and contentOffset to : \(self._startingContentOffset)")
+
+ // TODO: restore scrollView state
+ // This is temporary solution. Have to implement the save and restore scrollView state
+ var superScrollView : UIScrollView? = lastScrollView
+
+ while let scrollView = superScrollView {
+
+ let contentSize = CGSize(width: max(scrollView.contentSize.width, scrollView.frame.width), height: max(scrollView.contentSize.height, scrollView.frame.height))
+
+ let minimumY = contentSize.height - scrollView.frame.height
+
+ if minimumY < scrollView.contentOffset.y {
+ scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: minimumY)
+
+ self.showLog("Restoring \(scrollView._IQDescription()) contentOffset to : \(self._startingContentOffset)")
+ }
+
+ superScrollView = scrollView.superviewOfClassType(UIScrollView.self) as? UIScrollView
+ }
+ }) { (finished) -> Void in }
+ }
+
+ restorePosition()
+
+ //Reset all values
+ _lastScrollView = nil
+ _kbSize = CGSize.zero
+ _startingContentInsets = UIEdgeInsets()
+ _startingScrollIndicatorInsets = UIEdgeInsets()
+ _startingContentOffset = CGPoint.zero
+ // topViewBeginRect = CGRectZero //Commented due to #82
+
+ let elapsedTime = CACurrentMediaTime() - startTime
+ showLog("****** \(#function) ended: \(elapsedTime) seconds ******\n")
+ }
+
+ @objc internal func keyboardDidHide(_ notification:Notification) {
+
+ let startTime = CACurrentMediaTime()
+ showLog("****** \(#function) started ******")
+
+ _topViewBeginOrigin = IQKeyboardManager.kIQCGPointInvalid
+
+ _kbSize = CGSize.zero
+
+ let elapsedTime = CACurrentMediaTime() - startTime
+ showLog("****** \(#function) ended: \(elapsedTime) seconds ******\n")
+ }
+
+ ///-------------------------------------------
+ /// MARK: UITextField/UITextView Notifications
+ ///-------------------------------------------
+
+ /** UITextFieldTextDidBeginEditingNotification, UITextViewTextDidBeginEditingNotification. Fetching UITextFieldView object. */
+ @objc internal func textFieldViewDidBeginEditing(_ notification:Notification) {
+
+ let startTime = CACurrentMediaTime()
+ showLog("****** \(#function) started ******")
+
+ // Getting object
+ _textFieldView = notification.object as? UIView
+
+ if overrideKeyboardAppearance == true {
+
+ if let textFieldView = _textFieldView as? UITextField {
+ //If keyboard appearance is not like the provided appearance
+ if textFieldView.keyboardAppearance != keyboardAppearance {
+ //Setting textField keyboard appearance and reloading inputViews.
+ textFieldView.keyboardAppearance = keyboardAppearance
+ textFieldView.reloadInputViews()
+ }
+ } else if let textFieldView = _textFieldView as? UITextView {
+ //If keyboard appearance is not like the provided appearance
+ if textFieldView.keyboardAppearance != keyboardAppearance {
+ //Setting textField keyboard appearance and reloading inputViews.
+ textFieldView.keyboardAppearance = keyboardAppearance
+ textFieldView.reloadInputViews()
+ }
+ }
+ }
+
+ //If autoToolbar enable, then add toolbar on all the UITextField/UITextView's if required.
+ if privateIsEnableAutoToolbar() == true {
+
+ //UITextView special case. Keyboard Notification is firing before textView notification so we need to resign it first and then again set it as first responder to add toolbar on it.
+ if let textView = _textFieldView as? UITextView,
+ textView.inputAccessoryView == nil {
+
+ UIView.animate(withDuration: 0.00001, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in
+
+ self.addToolbarIfRequired()
+
+ }, completion: { (finished) -> Void in
+
+ //On textView toolbar didn't appear on first time, so forcing textView to reload it's inputViews.
+ textView.reloadInputViews()
+ })
+ } else {
+ //Adding toolbar
+ addToolbarIfRequired()
+ }
+ } else {
+ removeToolbarIfRequired()
+ }
+
+ resignFirstResponderGesture.isEnabled = privateShouldResignOnTouchOutside()
+ _textFieldView?.window?.addGestureRecognizer(resignFirstResponderGesture) // (Enhancement ID: #14)
+
+ if privateIsEnabled() == true {
+ if _topViewBeginOrigin.equalTo(IQKeyboardManager.kIQCGPointInvalid) == true { // (Bug ID: #5)
+
+ _rootViewController = _textFieldView?.parentContainerViewController()
+
+ if let controller = _rootViewController {
+
+ if _rootViewControllerWhilePopGestureRecognizerActive == controller {
+ _topViewBeginOrigin = _topViewBeginOriginWhilePopGestureRecognizerActive
+ } else {
+ _topViewBeginOrigin = controller.view.frame.origin
+ }
+
+ _rootViewControllerWhilePopGestureRecognizerActive = nil
+ _topViewBeginOriginWhilePopGestureRecognizerActive = IQKeyboardManager.kIQCGPointInvalid
+
+ self.showLog("Saving \(controller._IQDescription()) beginning origin : \(self._topViewBeginOrigin)")
+ }
+ }
+
+ //If _textFieldView is inside ignored responder then do nothing. (Bug ID: #37, #74, #76)
+ //See notes:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70).
+ if _privateIsKeyboardShowing == true,
+ let textFieldView = _textFieldView,
+ textFieldView.isAlertViewTextField() == false {
+
+ // keyboard is already showing. adjust position.
+ optimizedAdjustPosition()
+ }
+ }
+
+ let elapsedTime = CACurrentMediaTime() - startTime
+ showLog("****** \(#function) ended: \(elapsedTime) seconds ******\n")
+ }
+
+ /** UITextFieldTextDidEndEditingNotification, UITextViewTextDidEndEditingNotification. Removing fetched object. */
+ @objc internal func textFieldViewDidEndEditing(_ notification:Notification) {
+
+ let startTime = CACurrentMediaTime()
+ showLog("****** \(#function) started ******")
+
+ //Removing gesture recognizer (Enhancement ID: #14)
+ _textFieldView?.window?.removeGestureRecognizer(resignFirstResponderGesture)
+
+ // We check if there's a change in original frame or not.
+
+ if let textView = _textFieldView as? UITextView {
+
+ if isTextViewContentInsetChanged == true {
+
+ UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in
+
+ self.isTextViewContentInsetChanged = false
+
+ self.showLog("Restoring \(textView._IQDescription()) textView.contentInset to : \(self.startingTextViewContentInsets)")
+
+ //Setting textField to it's initial contentInset
+ textView.contentInset = self.startingTextViewContentInsets
+ textView.scrollIndicatorInsets = self.startingTextViewScrollIndicatorInsets
+
+ }, completion: { (finished) -> Void in })
+ }
+ }
+
+ //Setting object to nil
+ _textFieldView = nil
+
+ let elapsedTime = CACurrentMediaTime() - startTime
+ showLog("****** \(#function) ended: \(elapsedTime) seconds ******\n")
+ }
+
+ ///---------------------------------------
+ /// MARK: UIStatusBar Notification methods
+ ///---------------------------------------
+
+ /** UIApplicationWillChangeStatusBarOrientationNotification. Need to set the textView to it's original position. If any frame changes made. (Bug ID: #92)*/
+ @objc internal func willChangeStatusBarOrientation(_ notification:Notification) {
+
+ let startTime = CACurrentMediaTime()
+ showLog("****** \(#function) started ******")
+
+ //If textViewContentInsetChanged is saved then restore it.
+ if let textView = _textFieldView as? UITextView {
+
+ if isTextViewContentInsetChanged == true {
+
+ UIView.animate(withDuration: _animationDuration, delay: 0, options: _animationCurve.union(.beginFromCurrentState), animations: { () -> Void in
+
+ self.isTextViewContentInsetChanged = false
+
+ self.showLog("Restoring \(textView._IQDescription()) textView.contentInset to : \(self.startingTextViewContentInsets)")
+
+ //Setting textField to it's initial contentInset
+ textView.contentInset = self.startingTextViewContentInsets
+ textView.scrollIndicatorInsets = self.startingTextViewScrollIndicatorInsets
+
+ }, completion: { (finished) -> Void in })
+ }
+ }
+
+ restorePosition()
+
+ let elapsedTime = CACurrentMediaTime() - startTime
+ showLog("****** \(#function) ended: \(elapsedTime) seconds ******\n")
+ }
+
+ ///------------------
+ /// MARK: AutoToolbar
+ ///------------------
+
+ /** Get all UITextField/UITextView siblings of textFieldView. */
+ private func responderViews()-> [UIView]? {
+
+ var superConsideredView : UIView?
+
+ //If find any consider responderView in it's upper hierarchy then will get deepResponderView.
+ for disabledClass in toolbarPreviousNextAllowedClasses {
+
+ superConsideredView = _textFieldView?.superviewOfClassType(disabledClass)
+
+ if superConsideredView != nil {
+ break
+ }
+ }
+
+ //If there is a superConsideredView in view's hierarchy, then fetching all it's subview that responds. No sorting for superConsideredView, it's by subView position. (Enhancement ID: #22)
+ if let view = superConsideredView {
+ return view.deepResponderViews()
+ } else { //Otherwise fetching all the siblings
+
+ if let textFields = _textFieldView?.responderSiblings() {
+
+ //Sorting textFields according to behaviour
+ switch toolbarManageBehaviour {
+ //If autoToolbar behaviour is bySubviews, then returning it.
+ case IQAutoToolbarManageBehaviour.bySubviews: return textFields
+
+ //If autoToolbar behaviour is by tag, then sorting it according to tag property.
+ case IQAutoToolbarManageBehaviour.byTag: return textFields.sortedArrayByTag()
+
+ //If autoToolbar behaviour is by tag, then sorting it according to tag property.
+ case IQAutoToolbarManageBehaviour.byPosition: return textFields.sortedArrayByPosition()
+ }
+ } else {
+ return nil
+ }
+ }
+ }
+
+ /** Add toolbar if it is required to add on textFields and it's siblings. */
+ private func addToolbarIfRequired() {
+
+ let startTime = CACurrentMediaTime()
+ showLog("****** \(#function) started ******")
+
+ // Getting all the sibling textFields.
+ if let siblings = responderViews(), !siblings.isEmpty {
+
+ showLog("Found \(siblings.count) responder sibling(s)")
+
+ if let textField = _textFieldView {
+ //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Previous/Next/Done toolbar).
+ //setInputAccessoryView: check (Bug ID: #307)
+ if textField.responds(to: #selector(setter: UITextField.inputAccessoryView)) {
+
+ if textField.inputAccessoryView == nil ||
+ textField.inputAccessoryView?.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag ||
+ textField.inputAccessoryView?.tag == IQKeyboardManager.kIQDoneButtonToolbarTag {
+
+ let rightConfiguration : IQBarButtonItemConfiguration
+
+ if let doneBarButtonItemImage = toolbarDoneBarButtonItemImage {
+ rightConfiguration = IQBarButtonItemConfiguration(image: doneBarButtonItemImage, action: #selector(self.doneAction(_:)))
+ } else if let doneBarButtonItemText = toolbarDoneBarButtonItemText {
+ rightConfiguration = IQBarButtonItemConfiguration(title: doneBarButtonItemText, action: #selector(self.doneAction(_:)))
+ } else {
+ rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: #selector(self.doneAction(_:)))
+ }
+
+ // If only one object is found, then adding only Done button.
+ if (siblings.count == 1 && previousNextDisplayMode == .Default) || previousNextDisplayMode == .alwaysHide {
+
+ textField.addKeyboardToolbarWithTarget(target: self, titleText: (shouldShowToolbarPlaceholder ? textField.drawingToolbarPlaceholder : nil), rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: nil, nextBarButtonConfiguration: nil)
+
+ textField.inputAccessoryView?.tag = IQKeyboardManager.kIQDoneButtonToolbarTag // (Bug ID: #78)
+
+ } else if (siblings.count > 1 && previousNextDisplayMode == .Default) || previousNextDisplayMode == .alwaysShow {
+
+ let prevConfiguration : IQBarButtonItemConfiguration
+
+ if let doneBarButtonItemImage = toolbarPreviousBarButtonItemImage {
+ prevConfiguration = IQBarButtonItemConfiguration(image: doneBarButtonItemImage, action: #selector(self.previousAction(_:)))
+ } else if let doneBarButtonItemText = toolbarPreviousBarButtonItemText {
+ prevConfiguration = IQBarButtonItemConfiguration(title: doneBarButtonItemText, action: #selector(self.previousAction(_:)))
+ } else {
+ prevConfiguration = IQBarButtonItemConfiguration(image: (UIImage.keyboardPreviousImage() ?? UIImage()), action: #selector(self.previousAction(_:)))
+ }
+
+ let nextConfiguration : IQBarButtonItemConfiguration
+
+ if let doneBarButtonItemImage = toolbarNextBarButtonItemImage {
+ nextConfiguration = IQBarButtonItemConfiguration(image: doneBarButtonItemImage, action: #selector(self.nextAction(_:)))
+ } else if let doneBarButtonItemText = toolbarNextBarButtonItemText {
+ nextConfiguration = IQBarButtonItemConfiguration(title: doneBarButtonItemText, action: #selector(self.nextAction(_:)))
+ } else {
+ nextConfiguration = IQBarButtonItemConfiguration(image: (UIImage.keyboardNextImage() ?? UIImage()), action: #selector(self.nextAction(_:)))
+ }
+
+ textField.addKeyboardToolbarWithTarget(target: self, titleText: (shouldShowToolbarPlaceholder ? textField.drawingToolbarPlaceholder : nil), rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration)
+
+ textField.inputAccessoryView?.tag = IQKeyboardManager.kIQPreviousNextButtonToolbarTag // (Bug ID: #78)
+ }
+
+ let toolbar = textField.keyboardToolbar
+
+ // Setting toolbar to keyboard.
+ if let _textField = textField as? UITextField {
+
+ //Bar style according to keyboard appearance
+ switch _textField.keyboardAppearance {
+
+ case .dark:
+ toolbar.barStyle = UIBarStyle.black
+ toolbar.tintColor = UIColor.white
+ toolbar.barTintColor = nil
+ default:
+ toolbar.barStyle = UIBarStyle.default
+ toolbar.barTintColor = toolbarBarTintColor
+
+ //Setting toolbar tintColor // (Enhancement ID: #30)
+ if shouldToolbarUsesTextFieldTintColor {
+ toolbar.tintColor = _textField.tintColor
+ } else if let tintColor = toolbarTintColor {
+ toolbar.tintColor = tintColor
+ } else {
+ toolbar.tintColor = UIColor.black
+ }
+ }
+ } else if let _textView = textField as? UITextView {
+
+ //Bar style according to keyboard appearance
+ switch _textView.keyboardAppearance {
+
+ case .dark:
+ toolbar.barStyle = UIBarStyle.black
+ toolbar.tintColor = UIColor.white
+ toolbar.barTintColor = nil
+ default:
+ toolbar.barStyle = UIBarStyle.default
+ toolbar.barTintColor = toolbarBarTintColor
+
+ if shouldToolbarUsesTextFieldTintColor {
+ toolbar.tintColor = _textView.tintColor
+ } else if let tintColor = toolbarTintColor {
+ toolbar.tintColor = tintColor
+ } else {
+ toolbar.tintColor = UIColor.black
+ }
+ }
+ }
+
+ //Setting toolbar title font. // (Enhancement ID: #30)
+ if shouldShowToolbarPlaceholder == true &&
+ textField.shouldHideToolbarPlaceholder == false {
+
+ //Updating placeholder font to toolbar. //(Bug ID: #148, #272)
+ if toolbar.titleBarButton.title == nil ||
+ toolbar.titleBarButton.title != textField.drawingToolbarPlaceholder {
+ toolbar.titleBarButton.title = textField.drawingToolbarPlaceholder
+ }
+
+ //Setting toolbar title font. // (Enhancement ID: #30)
+ if let font = placeholderFont {
+ toolbar.titleBarButton.titleFont = font
+ }
+
+ //Setting toolbar title color. // (Enhancement ID: #880)
+ if let color = placeholderColor {
+ toolbar.titleBarButton.titleColor = color
+ }
+
+ //Setting toolbar button title color. // (Enhancement ID: #880)
+ if let color = placeholderButtonColor {
+ toolbar.titleBarButton.selectableTitleColor = color
+ }
+
+ } else {
+
+ toolbar.titleBarButton.title = nil
+ }
+
+ //In case of UITableView (Special), the next/previous buttons has to be refreshed everytime. (Bug ID: #56)
+ // If firstTextField, then previous should not be enabled.
+ if siblings.first == textField {
+ if (siblings.count == 1) {
+ textField.keyboardToolbar.previousBarButton.isEnabled = false
+ textField.keyboardToolbar.nextBarButton.isEnabled = false
+ } else {
+ textField.keyboardToolbar.previousBarButton.isEnabled = false
+ textField.keyboardToolbar.nextBarButton.isEnabled = true
+ }
+ } else if siblings.last == textField { // If lastTextField then next should not be enaled.
+ textField.keyboardToolbar.previousBarButton.isEnabled = true
+ textField.keyboardToolbar.nextBarButton.isEnabled = false
+ } else {
+ textField.keyboardToolbar.previousBarButton.isEnabled = true
+ textField.keyboardToolbar.nextBarButton.isEnabled = true
+ }
+ }
+ }
+ }
+ }
+
+ let elapsedTime = CACurrentMediaTime() - startTime
+ showLog("****** \(#function) ended: \(elapsedTime) seconds ******\n")
+ }
+
+ /** Remove any toolbar if it is IQToolbar. */
+ private func removeToolbarIfRequired() { // (Bug ID: #18)
+
+ let startTime = CACurrentMediaTime()
+ showLog("****** \(#function) started ******")
+
+ // Getting all the sibling textFields.
+ if let siblings = responderViews() {
+
+ showLog("Found \(siblings.count) responder sibling(s)")
+
+ for view in siblings {
+
+ if let toolbar = view.inputAccessoryView as? IQToolbar {
+
+ //setInputAccessoryView: check (Bug ID: #307)
+ if view.responds(to: #selector(setter: UITextField.inputAccessoryView)) &&
+ (toolbar.tag == IQKeyboardManager.kIQDoneButtonToolbarTag || toolbar.tag == IQKeyboardManager.kIQPreviousNextButtonToolbarTag) {
+
+ if let textField = view as? UITextField {
+ textField.inputAccessoryView = nil
+ textField.reloadInputViews()
+ } else if let textView = view as? UITextView {
+ textView.inputAccessoryView = nil
+ textView.reloadInputViews()
+ }
+ }
+ }
+ }
+ }
+
+ let elapsedTime = CACurrentMediaTime() - startTime
+ showLog("****** \(#function) ended: \(elapsedTime) seconds ******\n")
+ }
+
+ /** reloadInputViews to reload toolbar buttons enable/disable state on the fly Enhancement ID #434. */
+ @objc public func reloadInputViews() {
+
+ //If enabled then adding toolbar.
+ if privateIsEnableAutoToolbar() == true {
+ self.addToolbarIfRequired()
+ } else {
+ self.removeToolbarIfRequired()
+ }
+ }
+
+ ///------------------------------------
+ /// MARK: Debugging & Developer options
+ ///------------------------------------
+
+ @objc public var enableDebugging = false
+
+ /**
+ @warning Use below methods to completely enable/disable notifications registered by library internally. Please keep in mind that library is totally dependent on NSNotification of UITextField, UITextField, Keyboard etc. If you do unregisterAllNotifications then library will not work at all. You should only use below methods if you want to completedly disable all library functions. You should use below methods at your own risk.
+ */
+ @objc public func registerAllNotifications() {
+
+ #if swift(>=4.2)
+ let UIKeyboardWillShow = UIResponder.keyboardWillShowNotification
+ let UIKeyboardDidShow = UIResponder.keyboardDidShowNotification
+ let UIKeyboardWillHide = UIResponder.keyboardWillHideNotification
+ let UIKeyboardDidHide = UIResponder.keyboardDidHideNotification
+
+ let UITextFieldTextDidBeginEditing = UITextField.textDidBeginEditingNotification
+ let UITextFieldTextDidEndEditing = UITextField.textDidEndEditingNotification
+
+ let UITextViewTextDidBeginEditing = UITextView.textDidBeginEditingNotification
+ let UITextViewTextDidEndEditing = UITextView.textDidEndEditingNotification
+
+ let UIApplicationWillChangeStatusBarOrientation = UIApplication.willChangeStatusBarOrientationNotification
+ #else
+ let UIKeyboardWillShow = Notification.Name.UIKeyboardWillShow
+ let UIKeyboardDidShow = Notification.Name.UIKeyboardDidShow
+ let UIKeyboardWillHide = Notification.Name.UIKeyboardWillHide
+ let UIKeyboardDidHide = Notification.Name.UIKeyboardDidHide
+
+ let UITextFieldTextDidBeginEditing = Notification.Name.UITextFieldTextDidBeginEditing
+ let UITextFieldTextDidEndEditing = Notification.Name.UITextFieldTextDidEndEditing
+
+ let UITextViewTextDidBeginEditing = Notification.Name.UITextViewTextDidBeginEditing
+ let UITextViewTextDidEndEditing = Notification.Name.UITextViewTextDidEndEditing
+
+ let UIApplicationWillChangeStatusBarOrientation = Notification.Name.UIApplicationWillChangeStatusBarOrientation
+ #endif
+
+ // Registering for keyboard notification.
+ NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(_:)), name: UIKeyboardWillShow, object: nil)
+ NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow(_:)), name: UIKeyboardDidShow, object: nil)
+ NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(_:)), name: UIKeyboardWillHide, object: nil)
+ NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidHide(_:)), name: UIKeyboardDidHide, object: nil)
+
+ // Registering for UITextField notification.
+ registerTextFieldViewClass(UITextField.self, didBeginEditingNotificationName: UITextFieldTextDidBeginEditing.rawValue, didEndEditingNotificationName: UITextFieldTextDidEndEditing.rawValue)
+
+ // Registering for UITextView notification.
+ registerTextFieldViewClass(UITextView.self, didBeginEditingNotificationName: UITextViewTextDidBeginEditing.rawValue, didEndEditingNotificationName: UITextViewTextDidEndEditing.rawValue)
+
+ // Registering for orientation changes notification
+ NotificationCenter.default.addObserver(self, selector: #selector(self.willChangeStatusBarOrientation(_:)), name: UIApplicationWillChangeStatusBarOrientation, object: UIApplication.shared)
+ }
+
+ @objc public func unregisterAllNotifications() {
+
+ #if swift(>=4.2)
+ let UIKeyboardWillShow = UIResponder.keyboardWillShowNotification
+ let UIKeyboardDidShow = UIResponder.keyboardDidShowNotification
+ let UIKeyboardWillHide = UIResponder.keyboardWillHideNotification
+ let UIKeyboardDidHide = UIResponder.keyboardDidHideNotification
+
+ let UITextFieldTextDidBeginEditing = UITextField.textDidBeginEditingNotification
+ let UITextFieldTextDidEndEditing = UITextField.textDidEndEditingNotification
+
+ let UITextViewTextDidBeginEditing = UITextView.textDidBeginEditingNotification
+ let UITextViewTextDidEndEditing = UITextView.textDidEndEditingNotification
+
+ let UIApplicationWillChangeStatusBarOrientation = UIApplication.willChangeStatusBarOrientationNotification
+ #else
+ let UIKeyboardWillShow = Notification.Name.UIKeyboardWillShow
+ let UIKeyboardDidShow = Notification.Name.UIKeyboardDidShow
+ let UIKeyboardWillHide = Notification.Name.UIKeyboardWillHide
+ let UIKeyboardDidHide = Notification.Name.UIKeyboardDidHide
+
+ let UITextFieldTextDidBeginEditing = Notification.Name.UITextFieldTextDidBeginEditing
+ let UITextFieldTextDidEndEditing = Notification.Name.UITextFieldTextDidEndEditing
+
+ let UITextViewTextDidBeginEditing = Notification.Name.UITextViewTextDidBeginEditing
+ let UITextViewTextDidEndEditing = Notification.Name.UITextViewTextDidEndEditing
+
+ let UIApplicationWillChangeStatusBarOrientation = Notification.Name.UIApplicationWillChangeStatusBarOrientation
+ #endif
+
+ // Unregistering for keyboard notification.
+ NotificationCenter.default.removeObserver(self, name: UIKeyboardWillShow, object: nil)
+ NotificationCenter.default.removeObserver(self, name: UIKeyboardDidShow, object: nil)
+ NotificationCenter.default.removeObserver(self, name: UIKeyboardWillHide, object: nil)
+ NotificationCenter.default.removeObserver(self, name: UIKeyboardDidHide, object: nil)
+
+ // Unregistering for UITextField notification.
+ unregisterTextFieldViewClass(UITextField.self, didBeginEditingNotificationName: UITextFieldTextDidBeginEditing.rawValue, didEndEditingNotificationName: UITextFieldTextDidEndEditing.rawValue)
+
+ // Unregistering for UITextView notification.
+ unregisterTextFieldViewClass(UITextView.self, didBeginEditingNotificationName: UITextViewTextDidBeginEditing.rawValue, didEndEditingNotificationName: UITextViewTextDidEndEditing.rawValue)
+
+ // Unregistering for orientation changes notification
+ NotificationCenter.default.removeObserver(self, name: UIApplicationWillChangeStatusBarOrientation, object: UIApplication.shared)
+ }
+
+ private func showLog(_ logString: String) {
+
+ if enableDebugging {
+ print("IQKeyboardManager: " + logString)
+ }
+ }
+}
+
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift
new file mode 100644
index 0000000..cd85ecc
--- /dev/null
+++ b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift
@@ -0,0 +1,628 @@
+//
+// IQKeyboardReturnKeyHandler.swift
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// 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.
+
+
+import Foundation
+import UIKit
+
+fileprivate class IQTextFieldViewInfoModal : NSObject {
+
+ fileprivate weak var textFieldDelegate: UITextFieldDelegate?
+ fileprivate weak var textViewDelegate: UITextViewDelegate?
+ fileprivate weak var textFieldView: UIView?
+ fileprivate var originalReturnKeyType = UIReturnKeyType.default
+
+ init(textFieldView : UIView?, textFieldDelegate : UITextFieldDelegate?, textViewDelegate : UITextViewDelegate?, originalReturnKeyType : UIReturnKeyType = .default) {
+ self.textFieldView = textFieldView
+ self.textFieldDelegate = textFieldDelegate
+ self.textViewDelegate = textViewDelegate
+ self.originalReturnKeyType = originalReturnKeyType
+ }
+}
+
+/**
+Manages the return key to work like next/done in a view hierarchy.
+*/
+public class IQKeyboardReturnKeyHandler: NSObject , UITextFieldDelegate, UITextViewDelegate {
+
+
+ ///---------------
+ /// MARK: Settings
+ ///---------------
+
+ /**
+ Delegate of textField/textView.
+ */
+ @objc public weak var delegate: (UITextFieldDelegate & UITextViewDelegate)?
+
+ /**
+ Set the last textfield return key type. Default is UIReturnKeyDefault.
+ */
+ @objc public var lastTextFieldReturnKeyType : UIReturnKeyType = UIReturnKeyType.default {
+
+ didSet {
+
+ for modal in textFieldInfoCache {
+
+ if let view = modal.textFieldView {
+ updateReturnKeyTypeOnTextField(view)
+ }
+ }
+ }
+ }
+
+ ///--------------------------------------
+ /// MARK: Initialization/Deinitialization
+ ///--------------------------------------
+
+ @objc public override init() {
+ super.init()
+ }
+
+ /**
+ Add all the textFields available in UIViewController's view.
+ */
+ @objc public init(controller : UIViewController) {
+ super.init()
+
+ addResponderFromView(controller.view)
+ }
+
+ deinit {
+
+ for modal in textFieldInfoCache {
+
+ if let textField = modal.textFieldView as? UITextField {
+ textField.returnKeyType = modal.originalReturnKeyType
+
+ textField.delegate = modal.textFieldDelegate
+
+ } else if let textView = modal.textFieldView as? UITextView {
+
+ textView.returnKeyType = modal.originalReturnKeyType
+
+ textView.delegate = modal.textViewDelegate
+ }
+ }
+
+ textFieldInfoCache.removeAll()
+ }
+
+
+ ///------------------------
+ /// MARK: Private variables
+ ///------------------------
+ private var textFieldInfoCache = [IQTextFieldViewInfoModal]()
+
+ ///------------------------
+ /// MARK: Private Functions
+ ///------------------------
+ private func textFieldViewCachedInfo(_ textField : UIView) -> IQTextFieldViewInfoModal? {
+
+ for modal in textFieldInfoCache {
+
+ if let view = modal.textFieldView {
+
+ if view == textField {
+ return modal
+ }
+ }
+ }
+
+ return nil
+ }
+
+ private func updateReturnKeyTypeOnTextField(_ view : UIView)
+ {
+ var superConsideredView : UIView?
+
+ //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347)
+ for disabledClass in IQKeyboardManager.shared.toolbarPreviousNextAllowedClasses {
+
+ superConsideredView = view.superviewOfClassType(disabledClass)
+
+ if superConsideredView != nil {
+ break
+ }
+ }
+
+ var textFields = [UIView]()
+
+ //If there is a tableView in view's hierarchy, then fetching all it's subview that responds.
+ if let unwrappedTableView = superConsideredView { // (Enhancement ID: #22)
+ textFields = unwrappedTableView.deepResponderViews()
+ } else { //Otherwise fetching all the siblings
+
+ textFields = view.responderSiblings()
+
+ //Sorting textFields according to behaviour
+ switch IQKeyboardManager.shared.toolbarManageBehaviour {
+ //If needs to sort it by tag
+ case .byTag: textFields = textFields.sortedArrayByTag()
+ //If needs to sort it by Position
+ case .byPosition: textFields = textFields.sortedArrayByPosition()
+ default: break
+ }
+ }
+
+ if let lastView = textFields.last {
+
+ if let textField = view as? UITextField {
+
+ //If it's the last textField in responder view, else next
+ textField.returnKeyType = (view == lastView) ? lastTextFieldReturnKeyType : UIReturnKeyType.next
+ } else if let textView = view as? UITextView {
+
+ //If it's the last textField in responder view, else next
+ textView.returnKeyType = (view == lastView) ? lastTextFieldReturnKeyType : UIReturnKeyType.next
+ }
+ }
+ }
+
+
+ ///----------------------------------------------
+ /// MARK: Registering/Unregistering textFieldView
+ ///----------------------------------------------
+
+ /**
+ Should pass UITextField/UITextView intance. Assign textFieldView delegate to self, change it's returnKeyType.
+
+ @param view UITextField/UITextView object to register.
+ */
+ @objc public func addTextFieldView(_ view : UIView) {
+
+ let modal = IQTextFieldViewInfoModal(textFieldView: view, textFieldDelegate: nil, textViewDelegate: nil)
+
+ if let textField = view as? UITextField {
+
+ modal.originalReturnKeyType = textField.returnKeyType
+ modal.textFieldDelegate = textField.delegate
+ textField.delegate = self
+
+ } else if let textView = view as? UITextView {
+
+ modal.originalReturnKeyType = textView.returnKeyType
+ modal.textViewDelegate = textView.delegate
+ textView.delegate = self
+ }
+
+ textFieldInfoCache.append(modal)
+ }
+
+ /**
+ Should pass UITextField/UITextView intance. Restore it's textFieldView delegate and it's returnKeyType.
+
+ @param view UITextField/UITextView object to unregister.
+ */
+ @objc public func removeTextFieldView(_ view : UIView) {
+
+ if let modal = textFieldViewCachedInfo(view) {
+
+ if let textField = view as? UITextField {
+
+ textField.returnKeyType = modal.originalReturnKeyType
+ textField.delegate = modal.textFieldDelegate
+ } else if let textView = view as? UITextView {
+
+ textView.returnKeyType = modal.originalReturnKeyType
+ textView.delegate = modal.textViewDelegate
+ }
+
+ if let index = textFieldInfoCache.index(where: { $0.textFieldView == view}) {
+
+ textFieldInfoCache.remove(at: index)
+ }
+ }
+ }
+
+ /**
+ Add all the UITextField/UITextView responderView's.
+
+ @param view UIView object to register all it's responder subviews.
+ */
+ @objc public func addResponderFromView(_ view : UIView) {
+
+ let textFields = view.deepResponderViews()
+
+ for textField in textFields {
+
+ addTextFieldView(textField)
+ }
+ }
+
+ /**
+ Remove all the UITextField/UITextView responderView's.
+
+ @param view UIView object to unregister all it's responder subviews.
+ */
+ @objc public func removeResponderFromView(_ view : UIView) {
+
+ let textFields = view.deepResponderViews()
+
+ for textField in textFields {
+
+ removeTextFieldView(textField)
+ }
+ }
+
+ @discardableResult private func goToNextResponderOrResign(_ view : UIView) -> Bool {
+
+ var superConsideredView : UIView?
+
+ //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347)
+ for disabledClass in IQKeyboardManager.shared.toolbarPreviousNextAllowedClasses {
+
+ superConsideredView = view.superviewOfClassType(disabledClass)
+
+ if superConsideredView != nil {
+ break
+ }
+ }
+
+ var textFields = [UIView]()
+
+ //If there is a tableView in view's hierarchy, then fetching all it's subview that responds.
+ if let unwrappedTableView = superConsideredView { // (Enhancement ID: #22)
+ textFields = unwrappedTableView.deepResponderViews()
+ } else { //Otherwise fetching all the siblings
+
+ textFields = view.responderSiblings()
+
+ //Sorting textFields according to behaviour
+ switch IQKeyboardManager.shared.toolbarManageBehaviour {
+ //If needs to sort it by tag
+ case .byTag: textFields = textFields.sortedArrayByTag()
+ //If needs to sort it by Position
+ case .byPosition: textFields = textFields.sortedArrayByPosition()
+ default:
+ break
+ }
+ }
+
+ //Getting index of current textField.
+ if let index = textFields.index(of: view) {
+ //If it is not last textField. then it's next object becomeFirstResponder.
+ if index < (textFields.count - 1) {
+
+ let nextTextField = textFields[index+1]
+ nextTextField.becomeFirstResponder()
+ return false
+ } else {
+
+ view.resignFirstResponder()
+ return true
+ }
+ } else {
+ return true
+ }
+ }
+
+
+ ///---------------------------------------
+ /// MARK: UITextField/UITextView delegates
+ ///---------------------------------------
+
+ @objc public func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
+
+ if delegate == nil {
+
+ if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate {
+ if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldBeginEditing(_:))) {
+ return unwrapDelegate.textFieldShouldBeginEditing?(textField) == true
+ }
+ }
+ }
+
+ return true
+ }
+
+ @objc public func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
+
+ if delegate == nil {
+
+ if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate {
+ if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldEndEditing(_:))) {
+ return unwrapDelegate.textFieldShouldEndEditing?(textField) == true
+ }
+ }
+ }
+
+ return true
+ }
+
+ @objc public func textFieldDidBeginEditing(_ textField: UITextField) {
+ updateReturnKeyTypeOnTextField(textField)
+
+ var aDelegate : UITextFieldDelegate? = delegate
+
+ if aDelegate == nil {
+
+ if let modal = textFieldViewCachedInfo(textField) {
+ aDelegate = modal.textFieldDelegate
+ }
+ }
+
+ aDelegate?.textFieldDidBeginEditing?(textField)
+ }
+
+ @objc public func textFieldDidEndEditing(_ textField: UITextField) {
+
+ var aDelegate : UITextFieldDelegate? = delegate
+
+ if aDelegate == nil {
+
+ if let modal = textFieldViewCachedInfo(textField) {
+ aDelegate = modal.textFieldDelegate
+ }
+ }
+
+ aDelegate?.textFieldDidEndEditing?(textField)
+ }
+
+ #if swift(>=4.2)
+ @available(iOS 10.0, *)
+ @objc public func textFieldDidEndEditing(_ textField: UITextField, reason: UITextField.DidEndEditingReason) {
+
+ var aDelegate : UITextFieldDelegate? = delegate
+
+ if aDelegate == nil {
+
+ if let modal = textFieldViewCachedInfo(textField) {
+ aDelegate = modal.textFieldDelegate
+ }
+ }
+
+ aDelegate?.textFieldDidEndEditing?(textField, reason: reason)
+ }
+ #else
+ @available(iOS 10.0, *)
+ @objc public func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) {
+
+ var aDelegate : UITextFieldDelegate? = delegate
+
+ if aDelegate == nil {
+
+ if let modal = textFieldViewCachedInfo(textField) {
+ aDelegate = modal.textFieldDelegate
+ }
+ }
+
+ aDelegate?.textFieldDidEndEditing?(textField, reason: reason)
+ }
+ #endif
+
+ @objc public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
+
+ if delegate == nil {
+
+ if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate {
+ if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textField(_:shouldChangeCharactersIn:replacementString:))) {
+ return unwrapDelegate.textField?(textField, shouldChangeCharactersIn: range, replacementString: string) == true
+ }
+ }
+ }
+ return true
+ }
+
+ @objc public func textFieldShouldClear(_ textField: UITextField) -> Bool {
+
+ if delegate == nil {
+
+ if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate {
+ if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldClear(_:))) {
+ return unwrapDelegate.textFieldShouldClear?(textField) == true
+ }
+ }
+ }
+
+ return true
+ }
+
+
+ @objc public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
+
+ var shouldReturn = true
+
+ if delegate == nil {
+
+ if let unwrapDelegate = textFieldViewCachedInfo(textField)?.textFieldDelegate {
+ if unwrapDelegate.responds(to: #selector(UITextFieldDelegate.textFieldShouldReturn(_:))) {
+ shouldReturn = unwrapDelegate.textFieldShouldReturn?(textField) == true
+ }
+ }
+ }
+
+ if shouldReturn == true {
+ goToNextResponderOrResign(textField)
+ return true
+ } else {
+ return goToNextResponderOrResign(textField)
+ }
+ }
+
+
+ @objc public func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
+
+ if delegate == nil {
+
+ if let unwrapDelegate = textFieldViewCachedInfo(textView)?.textViewDelegate {
+ if unwrapDelegate.responds(to: #selector(UITextViewDelegate.textViewShouldBeginEditing(_:))) {
+ return unwrapDelegate.textViewShouldBeginEditing?(textView) == true
+ }
+ }
+ }
+
+ return true
+ }
+
+ @objc public func textViewShouldEndEditing(_ textView: UITextView) -> Bool {
+
+ if delegate == nil {
+
+ if let unwrapDelegate = textFieldViewCachedInfo(textView)?.textViewDelegate {
+ if unwrapDelegate.responds(to: #selector(UITextViewDelegate.textViewShouldEndEditing(_:))) {
+ return unwrapDelegate.textViewShouldEndEditing?(textView) == true
+ }
+ }
+ }
+
+ return true
+ }
+
+ @objc public func textViewDidBeginEditing(_ textView: UITextView) {
+ updateReturnKeyTypeOnTextField(textView)
+
+ var aDelegate : UITextViewDelegate? = delegate
+
+ if aDelegate == nil {
+
+ if let modal = textFieldViewCachedInfo(textView) {
+ aDelegate = modal.textViewDelegate
+ }
+ }
+
+ aDelegate?.textViewDidBeginEditing?(textView)
+ }
+
+ @objc public func textViewDidEndEditing(_ textView: UITextView) {
+
+ var aDelegate : UITextViewDelegate? = delegate
+
+ if aDelegate == nil {
+
+ if let modal = textFieldViewCachedInfo(textView) {
+ aDelegate = modal.textViewDelegate
+ }
+ }
+
+ aDelegate?.textViewDidEndEditing?(textView)
+ }
+
+ @objc public func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
+
+ var shouldReturn = true
+
+ if delegate == nil {
+
+ if let unwrapDelegate = textFieldViewCachedInfo(textView)?.textViewDelegate {
+ if unwrapDelegate.responds(to: #selector(UITextViewDelegate.textView(_:shouldChangeTextIn:replacementText:))) {
+ shouldReturn = (unwrapDelegate.textView?(textView, shouldChangeTextIn: range, replacementText: text)) == true
+ }
+ }
+ }
+
+ if shouldReturn == true && text == "\n" {
+ shouldReturn = goToNextResponderOrResign(textView)
+ }
+
+ return shouldReturn
+ }
+
+ @objc public func textViewDidChange(_ textView: UITextView) {
+
+ var aDelegate : UITextViewDelegate? = delegate
+
+ if aDelegate == nil {
+
+ if let modal = textFieldViewCachedInfo(textView) {
+ aDelegate = modal.textViewDelegate
+ }
+ }
+
+ aDelegate?.textViewDidChange?(textView)
+ }
+
+ @objc public func textViewDidChangeSelection(_ textView: UITextView) {
+
+ var aDelegate : UITextViewDelegate? = delegate
+
+ if aDelegate == nil {
+
+ if let modal = textFieldViewCachedInfo(textView) {
+ aDelegate = modal.textViewDelegate
+ }
+ }
+
+ aDelegate?.textViewDidChangeSelection?(textView)
+ }
+
+ @available(iOS 10.0, *)
+ @objc public func textView(_ aTextView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
+
+ if delegate == nil {
+
+ if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate {
+ if unwrapDelegate.responds(to: #selector(textView as (UITextView, URL, NSRange, UITextItemInteraction) -> Bool)) {
+ return unwrapDelegate.textView?(aTextView, shouldInteractWith: URL, in: characterRange, interaction: interaction) == true
+ }
+ }
+ }
+
+ return true
+ }
+
+ @available(iOS 10.0, *)
+ @objc public func textView(_ aTextView: UITextView, shouldInteractWith textAttachment: NSTextAttachment, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
+
+ if delegate == nil {
+
+ if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate {
+ if unwrapDelegate.responds(to: #selector(textView as (UITextView, NSTextAttachment, NSRange, UITextItemInteraction) -> Bool)) {
+ return unwrapDelegate.textView?(aTextView, shouldInteractWith: textAttachment, in: characterRange, interaction: interaction) == true
+ }
+ }
+ }
+
+ return true
+ }
+
+ @available(iOS, deprecated: 10.0)
+ @objc public func textView(_ aTextView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {
+
+ if delegate == nil {
+
+ if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate {
+ if unwrapDelegate.responds(to: #selector(textView as (UITextView, URL, NSRange) -> Bool)) {
+ return unwrapDelegate.textView?(aTextView, shouldInteractWith: URL, in: characterRange) == true
+ }
+ }
+ }
+
+ return true
+ }
+
+ @available(iOS, deprecated: 10.0)
+ @objc public func textView(_ aTextView: UITextView, shouldInteractWith textAttachment: NSTextAttachment, in characterRange: NSRange) -> Bool {
+
+ if delegate == nil {
+
+ if let unwrapDelegate = textFieldViewCachedInfo(aTextView)?.textViewDelegate {
+ if unwrapDelegate.responds(to: #selector(textView as (UITextView, NSTextAttachment, NSRange) -> Bool)) {
+ return unwrapDelegate.textView?(aTextView, shouldInteractWith: textAttachment, in: characterRange) == true
+ }
+ }
+ }
+
+ return true
+ }
+}
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQTextView/IQTextView.swift b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQTextView/IQTextView.swift
new file mode 100644
index 0000000..3f7ec31
--- /dev/null
+++ b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQTextView/IQTextView.swift
@@ -0,0 +1,209 @@
+//
+// IQTextView.swift
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// 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.
+
+
+import UIKit
+
+/** @abstract UITextView with placeholder support */
+open class IQTextView : UITextView {
+
+ @objc required public init?(coder aDecoder: NSCoder) {
+ super.init(coder: aDecoder)
+
+ #if swift(>=4.2)
+ let UITextViewTextDidChange = UITextView.textDidChangeNotification
+ #else
+ let UITextViewTextDidChange = Notification.Name.UITextViewTextDidChange
+ #endif
+
+ NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name:UITextViewTextDidChange, object: self)
+ }
+
+ @objc override public init(frame: CGRect, textContainer: NSTextContainer?) {
+ super.init(frame: frame, textContainer: textContainer)
+
+ #if swift(>=4.2)
+ let notificationName = UITextView.textDidChangeNotification
+ #else
+ let notificationName = Notification.Name.UITextViewTextDidChange
+ #endif
+
+ NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: notificationName, object: self)
+ }
+
+ @objc override open func awakeFromNib() {
+ super.awakeFromNib()
+
+ #if swift(>=4.2)
+ let UITextViewTextDidChange = UITextView.textDidChangeNotification
+ #else
+ let UITextViewTextDidChange = Notification.Name.UITextViewTextDidChange
+ #endif
+
+ NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: UITextViewTextDidChange, object: self)
+ }
+
+ deinit {
+ placeholderLabel.removeFromSuperview()
+ NotificationCenter.default.removeObserver(self)
+ }
+
+ private var placeholderInsets : UIEdgeInsets {
+ return UIEdgeInsets(top: self.textContainerInset.top, left: self.textContainerInset.left + self.textContainer.lineFragmentPadding, bottom: self.textContainerInset.bottom, right: self.textContainerInset.right + self.textContainer.lineFragmentPadding)
+ }
+
+ private var placeholderExpectedFrame : CGRect {
+ let placeholderInsets = self.placeholderInsets
+ let maxWidth = self.frame.width-placeholderInsets.left-placeholderInsets.right
+ let expectedSize = placeholderLabel.sizeThatFits(CGSize(width: maxWidth, height: self.frame.height-placeholderInsets.top-placeholderInsets.bottom))
+
+ return CGRect(x: placeholderInsets.left, y: placeholderInsets.top, width: maxWidth, height: expectedSize.height)
+ }
+
+ lazy var placeholderLabel: UILabel = {
+ let label = UILabel()
+
+ label.autoresizingMask = [.flexibleWidth, .flexibleHeight]
+ label.lineBreakMode = .byWordWrapping
+ label.numberOfLines = 0
+ label.font = self.font
+ label.textAlignment = self.textAlignment
+ label.backgroundColor = UIColor.clear
+ label.textColor = UIColor(white: 0.7, alpha: 1.0)
+ label.alpha = 0
+ self.addSubview(label)
+
+ return label
+ }()
+
+ /** @abstract To set textView's placeholder text color. */
+ @IBInspectable open var placeholderTextColor : UIColor? {
+
+ get {
+ return placeholderLabel.textColor
+ }
+
+ set {
+ placeholderLabel.textColor = newValue
+ }
+ }
+
+ /** @abstract To set textView's placeholder text. Default is nil. */
+ @IBInspectable open var placeholder : String? {
+
+ get {
+ return placeholderLabel.text
+ }
+
+ set {
+ placeholderLabel.text = newValue
+ refreshPlaceholder()
+ }
+ }
+
+ /** @abstract To set textView's placeholder attributed text. Default is nil. */
+ open var attributedPlaceholder: NSAttributedString? {
+ get {
+ return placeholderLabel.attributedText
+ }
+
+ set {
+ placeholderLabel.attributedText = newValue
+ refreshPlaceholder()
+ }
+ }
+
+ @objc override open func layoutSubviews() {
+ super.layoutSubviews()
+
+ placeholderLabel.frame = placeholderExpectedFrame
+ }
+
+ @objc internal func refreshPlaceholder() {
+
+ if !text.isEmpty || !attributedText.string.isEmpty {
+ placeholderLabel.alpha = 0
+ } else {
+ placeholderLabel.alpha = 1
+ }
+ }
+
+ @objc override open var text: String! {
+
+ didSet {
+ refreshPlaceholder()
+ }
+ }
+
+ open override var attributedText: NSAttributedString! {
+
+ didSet {
+ refreshPlaceholder()
+ }
+ }
+
+ @objc override open var font : UIFont? {
+
+ didSet {
+
+ if let unwrappedFont = font {
+ placeholderLabel.font = unwrappedFont
+ } else {
+ placeholderLabel.font = UIFont.systemFont(ofSize: 12)
+ }
+ }
+ }
+
+ @objc override open var textAlignment: NSTextAlignment
+ {
+ didSet {
+ placeholderLabel.textAlignment = textAlignment
+ }
+ }
+
+ @objc override open var delegate : UITextViewDelegate? {
+
+ get {
+ refreshPlaceholder()
+ return super.delegate
+ }
+
+ set {
+ super.delegate = newValue
+ }
+ }
+
+ @objc override open var intrinsicContentSize: CGSize {
+ guard !hasText else {
+ return super.intrinsicContentSize
+ }
+
+ var newSize = super.intrinsicContentSize
+ let placeholderInsets = self.placeholderInsets
+ newSize.height = placeholderExpectedFrame.height + placeholderInsets.top + placeholderInsets.bottom
+
+ return newSize
+ }
+}
+
+
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift
new file mode 100644
index 0000000..77bd00a
--- /dev/null
+++ b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift
@@ -0,0 +1,136 @@
+//
+// IQBarButtonItem.swift
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// 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.
+
+
+import UIKit
+import Foundation
+
+open class IQBarButtonItem: UIBarButtonItem {
+
+ private static var _classInitialize: Void = classInitialize()
+
+ @objc public override init() {
+ _ = IQBarButtonItem._classInitialize
+ super.init()
+ }
+
+ @objc public required init?(coder aDecoder: NSCoder) {
+ _ = IQBarButtonItem._classInitialize
+ super.init(coder: aDecoder)
+ }
+
+
+ private class func classInitialize() {
+
+ let appearanceProxy = self.appearance()
+
+ #if swift(>=4.2)
+ let states : [UIControl.State]
+ #else
+ let states : [UIControlState]
+ #endif
+
+ states = [.normal,.highlighted,.disabled,.selected,.application,.reserved]
+
+ for state in states {
+
+ appearanceProxy.setBackgroundImage(nil, for: state, barMetrics: .default)
+ appearanceProxy.setBackgroundImage(nil, for: state, style: .done, barMetrics: .default)
+ appearanceProxy.setBackgroundImage(nil, for: state, style: .plain, barMetrics: .default)
+ appearanceProxy.setBackButtonBackgroundImage(nil, for: state, barMetrics: .default)
+ }
+
+ appearanceProxy.setTitlePositionAdjustment(UIOffset(), for: .default)
+ appearanceProxy.setBackgroundVerticalPositionAdjustment(0, for: .default)
+ appearanceProxy.setBackButtonBackgroundVerticalPositionAdjustment(0, for: .default)
+ }
+
+ @objc override open var tintColor: UIColor? {
+ didSet {
+
+ #if swift(>=4.2)
+ var textAttributes = [NSAttributedString.Key : Any]()
+ let foregroundColorKey = NSAttributedString.Key.foregroundColor
+ #elseif swift(>=4)
+ var textAttributes = [NSAttributedStringKey : Any]()
+ let foregroundColorKey = NSAttributedStringKey.foregroundColor
+ #else
+ var textAttributes = [String:Any]()
+ let foregroundColorKey = NSForegroundColorAttributeName
+ #endif
+
+ textAttributes[foregroundColorKey] = tintColor
+
+ #if swift(>=4)
+
+ if let attributes = titleTextAttributes(for: .normal) {
+
+ for (key, value) in attributes {
+ #if swift(>=4.2)
+ textAttributes[key] = value
+ #else
+ textAttributes[NSAttributedStringKey.init(key)] = value
+ #endif
+ }
+ }
+
+ #else
+
+ if let attributes = titleTextAttributes(for: .normal) {
+ textAttributes = attributes
+ }
+ #endif
+
+ setTitleTextAttributes(textAttributes, for: .normal)
+ }
+ }
+
+ /**
+ Boolean to know if it's a system item or custom item, we are having a limitation that we cannot override a designated initializer, so we are manually setting this property once in initialization
+ */
+ @objc internal var isSystemItem = false
+
+ /**
+ Additional target & action to do get callback action. Note that setting custom target & selector doesn't affect native functionality, this is just an additional target to get a callback.
+
+ @param target Target object.
+ @param action Target Selector.
+ */
+ @objc open func setTarget(_ target: AnyObject?, action: Selector?) {
+ if let target = target, let action = action {
+ invocation = IQInvocation(target, action)
+ } else {
+ invocation = nil
+ }
+ }
+
+ /**
+ Customized Invocation to be called when button is pressed. invocation is internally created using setTarget:action: method.
+ */
+ @objc open var invocation : IQInvocation?
+
+ deinit {
+ target = nil
+ invocation = nil
+ }
+}
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift
new file mode 100644
index 0000000..cb28e13
--- /dev/null
+++ b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift
@@ -0,0 +1,45 @@
+//
+// IQInvocation.swift
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// 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.
+
+
+import UIKit
+
+public class IQInvocation : NSObject {
+ public weak var target: AnyObject?
+ public var action: Selector
+
+ @objc public init(_ target: AnyObject, _ action: Selector) {
+ self.target = target
+ self.action = action
+ }
+
+ @objc public func invoke(from: Any) {
+ if let target = target {
+ UIApplication.shared.sendAction(action, to: target, from: from, for: UIEvent())
+ }
+ }
+
+ deinit {
+ target = nil
+ }
+}
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift
new file mode 100644
index 0000000..fb6a879
--- /dev/null
+++ b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift
@@ -0,0 +1,28 @@
+//
+// IQPreviousNextView.swift
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// 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.
+
+import UIKit
+
+public class IQPreviousNextView: UIView {
+
+}
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift
new file mode 100644
index 0000000..984f80f
--- /dev/null
+++ b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift
@@ -0,0 +1,178 @@
+//
+// IQTitleBarButtonItem.swift
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// 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.
+
+
+import Foundation
+import UIKit
+
+open class IQTitleBarButtonItem: IQBarButtonItem {
+
+ @objc open var titleFont : UIFont? {
+
+ didSet {
+ if let unwrappedFont = titleFont {
+ titleButton?.titleLabel?.font = unwrappedFont
+ } else {
+ titleButton?.titleLabel?.font = UIFont.systemFont(ofSize: 13)
+ }
+ }
+ }
+
+ @objc override open var title: String? {
+ didSet {
+ titleButton?.setTitle(title, for: .normal)
+ }
+ }
+
+ /**
+ titleColor to be used for displaying button text when displaying title (disabled state).
+ */
+ @objc open var titleColor : UIColor? {
+
+ didSet {
+
+ if let color = titleColor {
+ titleButton?.setTitleColor(color, for:.disabled)
+ } else {
+ titleButton?.setTitleColor(UIColor.lightGray, for:.disabled)
+ }
+ }
+ }
+
+ /**
+ selectableTitleColor to be used for displaying button text when button is enabled.
+ */
+ @objc open var selectableTitleColor : UIColor? {
+
+ didSet {
+
+ if let color = selectableTitleColor {
+ titleButton?.setTitleColor(color, for:.normal)
+ } else {
+ titleButton?.setTitleColor(UIColor.init(red: 0.0, green: 0.5, blue: 1.0, alpha: 1), for:.normal)
+ }
+ }
+ }
+
+ /**
+ Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method.
+ */
+ @objc override open var invocation : IQInvocation? {
+
+ didSet {
+
+ if let target = invocation?.target, let action = invocation?.action {
+ self.isEnabled = true
+ titleButton?.isEnabled = true
+ titleButton?.addTarget(target, action: action, for: .touchUpInside)
+ } else {
+ self.isEnabled = false
+ titleButton?.isEnabled = false
+ titleButton?.removeTarget(nil, action: nil, for: .touchUpInside)
+ }
+ }
+ }
+
+ internal var titleButton : UIButton?
+ private var _titleView : UIView?
+
+ override init() {
+ super.init()
+ }
+
+ @objc public convenience init(title : String?) {
+
+ self.init(title: nil, style: .plain, target: nil, action: nil)
+
+ _titleView = UIView()
+ _titleView?.backgroundColor = UIColor.clear
+
+ titleButton = UIButton(type: .system)
+ titleButton?.isEnabled = false
+ titleButton?.titleLabel?.numberOfLines = 3
+ titleButton?.setTitleColor(UIColor.lightGray, for:.disabled)
+ titleButton?.setTitleColor(UIColor.init(red: 0.0, green: 0.5, blue: 1.0, alpha: 1), for:.normal)
+ titleButton?.backgroundColor = UIColor.clear
+ titleButton?.titleLabel?.textAlignment = .center
+ titleButton?.setTitle(title, for: .normal)
+ titleFont = UIFont.systemFont(ofSize: 13.0)
+ titleButton?.titleLabel?.font = self.titleFont
+ _titleView?.addSubview(titleButton!)
+
+#if swift(>=3.2)
+ if #available(iOS 11, *) {
+
+ var layoutDefaultLowPriority : UILayoutPriority
+ var layoutDefaultHighPriority : UILayoutPriority
+
+ #if swift(>=4.0)
+ let layoutPriorityLowValue = UILayoutPriority.defaultLow.rawValue-1
+ let layoutPriorityHighValue = UILayoutPriority.defaultHigh.rawValue-1
+ layoutDefaultLowPriority = UILayoutPriority(rawValue: layoutPriorityLowValue)
+ layoutDefaultHighPriority = UILayoutPriority(rawValue: layoutPriorityHighValue)
+ #else
+ layoutDefaultLowPriority = UILayoutPriorityDefaultLow-1
+ layoutDefaultHighPriority = UILayoutPriorityDefaultHigh-1
+ #endif
+
+ _titleView?.translatesAutoresizingMaskIntoConstraints = false
+ _titleView?.setContentHuggingPriority(layoutDefaultLowPriority, for: .vertical)
+ _titleView?.setContentHuggingPriority(layoutDefaultLowPriority, for: .horizontal)
+ _titleView?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .vertical)
+ _titleView?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .horizontal)
+
+ titleButton?.translatesAutoresizingMaskIntoConstraints = false
+ titleButton?.setContentHuggingPriority(layoutDefaultLowPriority, for: .vertical)
+ titleButton?.setContentHuggingPriority(layoutDefaultLowPriority, for: .horizontal)
+ titleButton?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .vertical)
+ titleButton?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .horizontal)
+
+ let top = NSLayoutConstraint.init(item: titleButton!, attribute: .top, relatedBy: .equal, toItem: _titleView, attribute: .top, multiplier: 1, constant: 0)
+ let bottom = NSLayoutConstraint.init(item: titleButton!, attribute: .bottom, relatedBy: .equal, toItem: _titleView, attribute: .bottom, multiplier: 1, constant: 0)
+ let leading = NSLayoutConstraint.init(item: titleButton!, attribute: .leading, relatedBy: .equal, toItem: _titleView, attribute: .leading, multiplier: 1, constant: 0)
+ let trailing = NSLayoutConstraint.init(item: titleButton!, attribute: .trailing, relatedBy: .equal, toItem: _titleView, attribute: .trailing, multiplier: 1, constant: 0)
+
+ _titleView?.addConstraints([top,bottom,leading,trailing])
+ } else {
+ _titleView?.autoresizingMask = [.flexibleWidth,.flexibleHeight]
+ titleButton?.autoresizingMask = [.flexibleWidth,.flexibleHeight]
+ }
+#else
+ _titleView?.autoresizingMask = [.flexibleWidth,.flexibleHeight]
+ titleButton?.autoresizingMask = [.flexibleWidth,.flexibleHeight]
+#endif
+
+ customView = _titleView
+ }
+
+ @objc required public init?(coder aDecoder: NSCoder) {
+ super.init(coder: aDecoder)
+ }
+
+ deinit {
+ customView = nil
+ titleButton?.removeTarget(nil, action: nil, for: .touchUpInside)
+ _titleView = nil
+ titleButton = nil
+ }
+}
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift
new file mode 100644
index 0000000..808bb8e
--- /dev/null
+++ b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift
@@ -0,0 +1,369 @@
+//
+// IQToolbar.swift
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// 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.
+
+
+import UIKit
+
+/** @abstract IQToolbar for IQKeyboardManager. */
+open class IQToolbar: UIToolbar , UIInputViewAudioFeedback {
+
+ private static var _classInitialize: Void = classInitialize()
+
+ private class func classInitialize() {
+
+ let appearanceProxy = self.appearance()
+
+ appearanceProxy.barTintColor = nil
+
+ let positions : [UIBarPosition] = [.any,.bottom,.top,.topAttached]
+
+ for position in positions {
+
+ appearanceProxy.setBackgroundImage(nil, forToolbarPosition: position, barMetrics: .default)
+ appearanceProxy.setShadowImage(nil, forToolbarPosition: .any)
+ }
+
+ //Background color
+ appearanceProxy.backgroundColor = nil
+ }
+
+ /**
+ Previous bar button of toolbar.
+ */
+ private var privatePreviousBarButton: IQBarButtonItem?
+ @objc open var previousBarButton : IQBarButtonItem {
+ get {
+ if privatePreviousBarButton == nil {
+ privatePreviousBarButton = IQBarButtonItem(image: nil, style: .plain, target: nil, action: nil)
+ privatePreviousBarButton?.accessibilityLabel = "Toolbar Previous Button"
+ }
+ return privatePreviousBarButton!
+ }
+
+ set (newValue) {
+ privatePreviousBarButton = newValue
+ }
+ }
+
+ /**
+ Next bar button of toolbar.
+ */
+ private var privateNextBarButton: IQBarButtonItem?
+ @objc open var nextBarButton : IQBarButtonItem {
+ get {
+ if privateNextBarButton == nil {
+ privateNextBarButton = IQBarButtonItem(image: nil, style: .plain, target: nil, action: nil)
+ privateNextBarButton?.accessibilityLabel = "Toolbar Next Button"
+ }
+ return privateNextBarButton!
+ }
+
+ set (newValue) {
+ privateNextBarButton = newValue
+ }
+ }
+
+ /**
+ Title bar button of toolbar.
+ */
+ private var privateTitleBarButton: IQTitleBarButtonItem?
+ @objc open var titleBarButton : IQTitleBarButtonItem {
+ get {
+ if privateTitleBarButton == nil {
+ privateTitleBarButton = IQTitleBarButtonItem(title: nil)
+ privateTitleBarButton?.accessibilityLabel = "Toolbar Title Button"
+ }
+ return privateTitleBarButton!
+ }
+
+ set (newValue) {
+ privateTitleBarButton = newValue
+ }
+ }
+
+ /**
+ Done bar button of toolbar.
+ */
+ private var privateDoneBarButton: IQBarButtonItem?
+ @objc open var doneBarButton : IQBarButtonItem {
+ get {
+ if privateDoneBarButton == nil {
+ privateDoneBarButton = IQBarButtonItem(title: nil, style: .done, target: nil, action: nil)
+ privateDoneBarButton?.accessibilityLabel = "Toolbar Done Button"
+ }
+ return privateDoneBarButton!
+ }
+
+ set (newValue) {
+ privateDoneBarButton = newValue
+ }
+ }
+
+ /**
+ Fixed space bar button of toolbar.
+ */
+ private var privateFixedSpaceBarButton: IQBarButtonItem?
+ @objc open var fixedSpaceBarButton : IQBarButtonItem {
+ get {
+ if privateFixedSpaceBarButton == nil {
+ privateFixedSpaceBarButton = IQBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
+ }
+ privateFixedSpaceBarButton!.isSystemItem = true
+
+ if #available(iOS 10, *) {
+ privateFixedSpaceBarButton!.width = 6
+ } else {
+ privateFixedSpaceBarButton!.width = 20
+ }
+
+ return privateFixedSpaceBarButton!
+ }
+
+ set (newValue) {
+ privateFixedSpaceBarButton = newValue
+ }
+ }
+
+ override init(frame: CGRect) {
+ _ = IQToolbar._classInitialize
+ super.init(frame: frame)
+
+ sizeToFit()
+
+ autoresizingMask = .flexibleWidth
+ self.isTranslucent = true
+ }
+
+ @objc required public init?(coder aDecoder: NSCoder) {
+ _ = IQToolbar._classInitialize
+ super.init(coder: aDecoder)
+
+ sizeToFit()
+
+ autoresizingMask = .flexibleWidth
+ self.isTranslucent = true
+ }
+
+ @objc override open func sizeThatFits(_ size: CGSize) -> CGSize {
+ var sizeThatFit = super.sizeThatFits(size)
+ sizeThatFit.height = 44
+ return sizeThatFit
+ }
+
+ @objc override open var tintColor: UIColor! {
+
+ didSet {
+ if let unwrappedItems = items {
+ for item in unwrappedItems {
+ item.tintColor = tintColor
+ }
+ }
+ }
+ }
+
+ @objc override open var barStyle: UIBarStyle {
+ didSet {
+
+ if titleBarButton.selectableTitleColor == nil {
+ if barStyle == .default {
+ titleBarButton.titleButton?.setTitleColor(UIColor.init(red: 0.0, green: 0.5, blue: 1.0, alpha: 1), for: .normal)
+ } else {
+ titleBarButton.titleButton?.setTitleColor(UIColor.yellow, for: .normal)
+ }
+ }
+ }
+ }
+
+ @objc override open func layoutSubviews() {
+
+ super.layoutSubviews()
+
+ //If running on Xcode9 (iOS11) only then we'll validate for iOS version, otherwise for older versions of Xcode (iOS10 and below) we'll just execute the tweak
+#if swift(>=3.2)
+
+ if #available(iOS 11, *) {
+ return
+ } else if let customTitleView = titleBarButton.customView {
+ var leftRect = CGRect.null
+ var rightRect = CGRect.null
+ var isTitleBarButtonFound = false
+
+ let sortedSubviews = self.subviews.sorted(by: { (view1 : UIView, view2 : UIView) -> Bool in
+
+ let x1 = view1.frame.minX
+ let y1 = view1.frame.minY
+ let x2 = view2.frame.minX
+ let y2 = view2.frame.minY
+
+ if x1 != x2 {
+ return x1 < x2
+ } else {
+ return y1 < y2
+ }
+ })
+
+ for barButtonItemView in sortedSubviews {
+
+ if isTitleBarButtonFound == true {
+ rightRect = barButtonItemView.frame
+ break
+ } else if barButtonItemView === customTitleView {
+ isTitleBarButtonFound = true
+ //If it's UIToolbarButton or UIToolbarTextButton (which actually UIBarButtonItem)
+ } else if barButtonItemView.isKind(of: UIControl.self) == true {
+ leftRect = barButtonItemView.frame
+ }
+ }
+
+ let titleMargin : CGFloat = 16
+
+ let maxWidth : CGFloat = self.frame.width - titleMargin*2 - (leftRect.isNull ? 0 : leftRect.maxX) - (rightRect.isNull ? 0 : self.frame.width - rightRect.minX)
+ let maxHeight = self.frame.height
+
+ let sizeThatFits = customTitleView.sizeThatFits(CGSize(width: maxWidth, height: maxHeight))
+
+ var titleRect : CGRect
+
+ if sizeThatFits.width > 0 && sizeThatFits.height > 0 {
+ let width = min(sizeThatFits.width, maxWidth)
+ let height = min(sizeThatFits.height, maxHeight)
+
+ var x : CGFloat
+
+ if (leftRect.isNull == false) {
+ x = titleMargin + leftRect.maxX + ((maxWidth - width)/2)
+ } else {
+ x = titleMargin
+ }
+
+ let y = (maxHeight - height)/2
+
+ titleRect = CGRect(x: x, y: y, width: width, height: height)
+ } else {
+
+ var x : CGFloat
+
+ if (leftRect.isNull == false) {
+ x = titleMargin + leftRect.maxX
+ } else {
+ x = titleMargin
+ }
+
+ let width : CGFloat = self.frame.width - titleMargin*2 - (leftRect.isNull ? 0 : leftRect.maxX) - (rightRect.isNull ? 0 : self.frame.width - rightRect.minX)
+
+ titleRect = CGRect(x: x, y: 0, width: width, height: maxHeight)
+ }
+
+ customTitleView.frame = titleRect
+ }
+
+#else
+ if let customTitleView = titleBarButton.customView {
+ var leftRect = CGRect.null
+ var rightRect = CGRect.null
+ var isTitleBarButtonFound = false
+
+ let sortedSubviews = self.subviews.sorted(by: { (view1 : UIView, view2 : UIView) -> Bool in
+
+ let x1 = view1.frame.minX
+ let y1 = view1.frame.minY
+ let x2 = view2.frame.minX
+ let y2 = view2.frame.minY
+
+ if x1 != x2 {
+ return x1 < x2
+ } else {
+ return y1 < y2
+ }
+ })
+
+ for barButtonItemView in sortedSubviews {
+
+ if isTitleBarButtonFound == true {
+ rightRect = barButtonItemView.frame
+ break
+ } else if barButtonItemView === titleBarButton.customView {
+ isTitleBarButtonFound = true
+ //If it's UIToolbarButton or UIToolbarTextButton (which actually UIBarButtonItem)
+ } else if barButtonItemView.isKind(of: UIControl.self) == true {
+ leftRect = barButtonItemView.frame
+ }
+ }
+
+ let titleMargin : CGFloat = 16
+ let maxWidth : CGFloat = self.frame.width - titleMargin*2 - (leftRect.isNull ? 0 : leftRect.maxX) - (rightRect.isNull ? 0 : self.frame.width - rightRect.minX)
+ let maxHeight = self.frame.height
+
+ let sizeThatFits = customTitleView.sizeThatFits(CGSize(width: maxWidth, height: maxHeight))
+
+ var titleRect : CGRect
+
+ if sizeThatFits.width > 0 && sizeThatFits.height > 0 {
+ let width = min(sizeThatFits.width, maxWidth)
+ let height = min(sizeThatFits.height, maxHeight)
+
+ var x : CGFloat
+
+ if (leftRect.isNull == false) {
+ x = titleMargin + leftRect.maxX + ((maxWidth - width)/2)
+ } else {
+ x = titleMargin
+ }
+
+ let y = (maxHeight - height)/2
+
+ titleRect = CGRect(x: x, y: y, width: width, height: height)
+ } else {
+
+ var x : CGFloat
+
+ if (leftRect.isNull == false) {
+ x = titleMargin + leftRect.maxX
+ } else {
+ x = titleMargin
+ }
+
+ let width : CGFloat = self.frame.width - titleMargin*2 - (leftRect.isNull ? 0 : leftRect.maxX) - (rightRect.isNull ? 0 : self.frame.width - rightRect.minX)
+
+ titleRect = CGRect(x: x, y: 0, width: width, height: maxHeight)
+ }
+
+ customTitleView.frame = titleRect
+ }
+#endif
+ }
+
+ @objc open var enableInputClicksWhenVisible: Bool {
+ return true
+ }
+
+ deinit {
+
+ items = nil
+ privatePreviousBarButton = nil
+ privateNextBarButton = nil
+ privateTitleBarButton = nil
+ privateDoneBarButton = nil
+ privateFixedSpaceBarButton = nil
+ }
+}
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift
new file mode 100644
index 0000000..a59c7fb
--- /dev/null
+++ b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift
@@ -0,0 +1,612 @@
+//
+// IQUIView+IQKeyboardToolbar.swift
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// 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.
+
+
+import UIKit
+
+private var kIQShouldHideToolbarPlaceholder = "kIQShouldHideToolbarPlaceholder"
+private var kIQToolbarPlaceholder = "kIQToolbarPlaceholder"
+
+private var kIQKeyboardToolbar = "kIQKeyboardToolbar"
+
+/**
+ IQBarButtonItemConfiguration for creating toolbar with bar button items
+ */
+public class IQBarButtonItemConfiguration : NSObject {
+
+ #if swift(>=4.2)
+ public init(barButtonSystemItem : UIBarButtonItem.SystemItem, action: Selector) {
+ self.barButtonSystemItem = barButtonSystemItem
+ self.image = nil
+ self.title = nil
+ self.action = action
+ super.init()
+ }
+ #else
+ public init(barButtonSystemItem : UIBarButtonSystemItem, action: Selector) {
+ self.barButtonSystemItem = barButtonSystemItem
+ self.image = nil
+ self.title = nil
+ self.action = action
+ super.init()
+ }
+ #endif
+
+ public init(image : UIImage, action: Selector) {
+ self.barButtonSystemItem = nil
+ self.image = image
+ self.title = nil
+ self.action = action
+ super.init()
+ }
+
+ public init(title : String, action: Selector) {
+ self.barButtonSystemItem = nil
+ self.image = nil
+ self.title = title
+ self.action = action
+ super.init()
+ }
+
+ #if swift(>=4.2)
+ public let barButtonSystemItem : UIBarButtonItem.SystemItem? //System Item to be used to instantiate bar button.
+ #else
+ public let barButtonSystemItem : UIBarButtonSystemItem? //System Item to be used to instantiate bar button.
+ #endif
+
+ public let image : UIImage? //Image to show on bar button item if it's not a system item.
+
+ public let title : String? //Title to show on bar button item if it's not a system item.
+
+ public let action : Selector? //action for bar button item. Usually 'doneAction:(IQBarButtonItem*)item'.
+}
+
+/**
+ UIImage category methods to get next/prev images
+ */
+extension UIImage {
+
+ public static func keyboardPreviousiOS9Image() -> UIImage? {
+
+ struct Static {
+ static var keyboardPreviousiOS9Image : UIImage?
+ }
+
+ if Static.keyboardPreviousiOS9Image == nil {
+ // Get the top level "bundle" which may actually be the framework
+ var bundle = Bundle(for: IQKeyboardManager.self)
+
+ if let resourcePath = bundle.path(forResource: "IQKeyboardManager", ofType: "bundle") {
+ if let resourcesBundle = Bundle(path: resourcePath) {
+ bundle = resourcesBundle
+ }
+ }
+
+ Static.keyboardPreviousiOS9Image = UIImage(named: "IQButtonBarArrowLeft", in: bundle, compatibleWith: nil)
+
+ //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
+ if #available(iOS 9, *) {
+ Static.keyboardPreviousiOS9Image = Static.keyboardPreviousiOS9Image?.imageFlippedForRightToLeftLayoutDirection()
+ }
+ }
+
+ return Static.keyboardPreviousiOS9Image
+ }
+
+ public static func keyboardNextiOS9Image() -> UIImage? {
+
+ struct Static {
+ static var keyboardNextiOS9Image : UIImage?
+ }
+
+ if Static.keyboardNextiOS9Image == nil {
+ // Get the top level "bundle" which may actually be the framework
+ var bundle = Bundle(for: IQKeyboardManager.self)
+
+ if let resourcePath = bundle.path(forResource: "IQKeyboardManager", ofType: "bundle") {
+ if let resourcesBundle = Bundle(path: resourcePath) {
+ bundle = resourcesBundle
+ }
+ }
+
+ Static.keyboardNextiOS9Image = UIImage(named: "IQButtonBarArrowRight", in: bundle, compatibleWith: nil)
+
+ //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
+ if #available(iOS 9, *) {
+ Static.keyboardNextiOS9Image = Static.keyboardNextiOS9Image?.imageFlippedForRightToLeftLayoutDirection()
+ }
+ }
+
+ return Static.keyboardNextiOS9Image
+ }
+
+ public static func keyboardPreviousiOS10Image() -> UIImage? {
+
+ struct Static {
+ static var keyboardPreviousiOS10Image : UIImage?
+ }
+
+ if Static.keyboardPreviousiOS10Image == nil {
+ // Get the top level "bundle" which may actually be the framework
+ var bundle = Bundle(for: IQKeyboardManager.self)
+
+ if let resourcePath = bundle.path(forResource: "IQKeyboardManager", ofType: "bundle") {
+ if let resourcesBundle = Bundle(path: resourcePath) {
+ bundle = resourcesBundle
+ }
+ }
+
+ Static.keyboardPreviousiOS10Image = UIImage(named: "IQButtonBarArrowUp", in: bundle, compatibleWith: nil)
+
+ //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
+ if #available(iOS 9, *) {
+ Static.keyboardPreviousiOS10Image = Static.keyboardPreviousiOS10Image?.imageFlippedForRightToLeftLayoutDirection()
+ }
+ }
+
+ return Static.keyboardPreviousiOS10Image
+ }
+
+ public static func keyboardNextiOS10Image() -> UIImage? {
+
+ struct Static {
+ static var keyboardNextiOS10Image : UIImage?
+ }
+
+ if Static.keyboardNextiOS10Image == nil {
+ // Get the top level "bundle" which may actually be the framework
+ var bundle = Bundle(for: IQKeyboardManager.self)
+
+ if let resourcePath = bundle.path(forResource: "IQKeyboardManager", ofType: "bundle") {
+ if let resourcesBundle = Bundle(path: resourcePath) {
+ bundle = resourcesBundle
+ }
+ }
+
+ Static.keyboardNextiOS10Image = UIImage(named: "IQButtonBarArrowDown", in: bundle, compatibleWith: nil)
+
+ //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
+ if #available(iOS 9, *) {
+ Static.keyboardNextiOS10Image = Static.keyboardNextiOS10Image?.imageFlippedForRightToLeftLayoutDirection()
+ }
+ }
+
+ return Static.keyboardNextiOS10Image
+ }
+
+ public static func keyboardPreviousImage() -> UIImage? {
+
+ if #available(iOS 10, *) {
+ return keyboardPreviousiOS10Image()
+ } else {
+ return keyboardPreviousiOS9Image()
+ }
+ }
+
+ public static func keyboardNextImage() -> UIImage? {
+
+ if #available(iOS 10, *) {
+ return keyboardNextiOS10Image()
+ } else {
+ return keyboardNextiOS9Image()
+ }
+ }
+}
+
+/**
+UIView category methods to add IQToolbar on UIKeyboard.
+*/
+public extension UIView {
+
+ ///--------------
+ /// MARK: Toolbar
+ ///--------------
+
+ /**
+ IQToolbar references for better customization control.
+ */
+ public var keyboardToolbar: IQToolbar {
+ var toolbar = inputAccessoryView as? IQToolbar
+
+ if (toolbar == nil)
+ {
+ toolbar = objc_getAssociatedObject(self, &kIQKeyboardToolbar) as? IQToolbar
+ }
+
+ if let unwrappedToolbar = toolbar {
+
+ return unwrappedToolbar
+
+ } else {
+
+ let newToolbar = IQToolbar()
+
+ objc_setAssociatedObject(self, &kIQKeyboardToolbar, newToolbar, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+
+ return newToolbar
+ }
+ }
+
+ ///--------------------
+ /// MARK: Toolbar title
+ ///--------------------
+
+ /**
+ If `shouldHideToolbarPlaceholder` is YES, then title will not be added to the toolbar. Default to NO.
+ */
+ @objc public var shouldHideToolbarPlaceholder: Bool {
+ get {
+ let aValue = objc_getAssociatedObject(self, &kIQShouldHideToolbarPlaceholder) as Any?
+
+ if let unwrapedValue = aValue as? Bool {
+ return unwrapedValue
+ } else {
+ return false
+ }
+ }
+ set(newValue) {
+ objc_setAssociatedObject(self, &kIQShouldHideToolbarPlaceholder, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+
+ self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder
+ }
+ }
+
+ /**
+ `toolbarPlaceholder` to override default `placeholder` text when drawing text on toolbar.
+ */
+ @objc public var toolbarPlaceholder: String? {
+ get {
+ let aValue = objc_getAssociatedObject(self, &kIQToolbarPlaceholder) as? String
+
+ return aValue
+ }
+ set(newValue) {
+ objc_setAssociatedObject(self, &kIQToolbarPlaceholder, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+
+ self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder
+ }
+ }
+
+ /**
+ `drawingToolbarPlaceholder` will be actual text used to draw on toolbar. This would either `placeholder` or `toolbarPlaceholder`.
+ */
+ @objc public var drawingToolbarPlaceholder: String? {
+
+ if (self.shouldHideToolbarPlaceholder)
+ {
+ return nil
+ }
+ else if (self.toolbarPlaceholder?.isEmpty == false) {
+ return self.toolbarPlaceholder
+ }
+ else if self.responds(to: #selector(getter: UITextField.placeholder)) {
+
+ if let textField = self as? UITextField {
+ return textField.placeholder
+ } else if let textView = self as? IQTextView {
+ return textView.placeholder
+ } else {
+ return nil
+ }
+ }
+ else {
+ return nil
+ }
+ }
+
+ ///---------------------
+ /// MARK: Private helper
+ ///---------------------
+
+ private static func flexibleBarButtonItem () -> IQBarButtonItem {
+
+ struct Static {
+
+ static let nilButton = IQBarButtonItem(barButtonSystemItem:.flexibleSpace, target: nil, action: nil)
+ }
+
+ Static.nilButton.isSystemItem = true
+ return Static.nilButton
+ }
+
+ ///-------------
+ /// MARK: Common
+ ///-------------
+
+ @objc public func addKeyboardToolbarWithTarget(target : AnyObject?, titleText : String?, rightBarButtonConfiguration:IQBarButtonItemConfiguration?, previousBarButtonConfiguration:IQBarButtonItemConfiguration? = nil, nextBarButtonConfiguration:IQBarButtonItemConfiguration? = nil) {
+
+ //If can't set InputAccessoryView. Then return
+ if self.responds(to: #selector(setter: UITextField.inputAccessoryView)) {
+
+ // Creating a toolBar for phoneNumber keyboard
+ let toolbar = self.keyboardToolbar
+
+ var items : [IQBarButtonItem] = []
+
+ if let prevConfig = previousBarButtonConfiguration {
+
+ var prev = toolbar.previousBarButton
+
+ if prevConfig.barButtonSystemItem == nil && prev.isSystemItem == false {
+ prev.title = prevConfig.title
+ prev.image = prevConfig.image
+ prev.target = target
+ prev.action = prevConfig.action
+ } else {
+ if let systemItem = prevConfig.barButtonSystemItem {
+ prev = IQBarButtonItem(barButtonSystemItem: systemItem, target: target, action: prevConfig.action)
+ prev.isSystemItem = true
+ } else if let image = prevConfig.image {
+ prev = IQBarButtonItem(image: image, style: .plain, target: target, action: prevConfig.action)
+ } else {
+ prev = IQBarButtonItem(title: prevConfig.title, style: .plain, target: target, action: prevConfig.action)
+ }
+
+ prev.invocation = toolbar.previousBarButton.invocation
+ prev.accessibilityLabel = toolbar.previousBarButton.accessibilityLabel
+ toolbar.previousBarButton = prev
+ }
+
+ items.append(prev)
+ }
+
+ if previousBarButtonConfiguration != nil && nextBarButtonConfiguration != nil {
+
+ items.append(toolbar.fixedSpaceBarButton)
+ }
+
+ if let nextConfig = nextBarButtonConfiguration {
+
+ var next = toolbar.nextBarButton
+
+ if nextConfig.barButtonSystemItem == nil && next.isSystemItem == false {
+ next.title = nextConfig.title
+ next.image = nextConfig.image
+ next.target = target
+ next.action = nextConfig.action
+ } else {
+ if let systemItem = nextConfig.barButtonSystemItem {
+ next = IQBarButtonItem(barButtonSystemItem: systemItem, target: target, action: nextConfig.action)
+ next.isSystemItem = true
+ } else if let image = nextConfig.image {
+ next = IQBarButtonItem(image: image, style: .plain, target: target, action: nextConfig.action)
+ } else {
+ next = IQBarButtonItem(title: nextConfig.title, style: .plain, target: target, action: nextConfig.action)
+ }
+
+ next.invocation = toolbar.nextBarButton.invocation
+ next.accessibilityLabel = toolbar.nextBarButton.accessibilityLabel
+ toolbar.nextBarButton = next
+ }
+
+ items.append(next)
+ }
+
+ //Title bar button item
+ do {
+ //Flexible space
+ items.append(UIView.flexibleBarButtonItem())
+
+ //Title button
+ toolbar.titleBarButton.title = titleText
+
+ #if swift(>=3.2)
+ if #available(iOS 11, *) {}
+ else {
+ toolbar.titleBarButton.customView?.frame = CGRect.zero
+ }
+ #else
+ toolbar.titleBarButton.customView?.frame = CGRect.zero
+ #endif
+
+ items.append(toolbar.titleBarButton)
+
+ //Flexible space
+ items.append(UIView.flexibleBarButtonItem())
+ }
+
+ if let rightConfig = rightBarButtonConfiguration {
+
+ var done = toolbar.doneBarButton
+
+ if rightConfig.barButtonSystemItem == nil && done.isSystemItem == false {
+ done.title = rightConfig.title
+ done.image = rightConfig.image
+ done.target = target
+ done.action = rightConfig.action
+ } else {
+ if let systemItem = rightConfig.barButtonSystemItem {
+ done = IQBarButtonItem(barButtonSystemItem: systemItem, target: target, action: rightConfig.action)
+ done.isSystemItem = true
+ } else if let image = rightConfig.image {
+ done = IQBarButtonItem(image: image, style: .plain, target: target, action: rightConfig.action)
+ } else {
+ done = IQBarButtonItem(title: rightConfig.title, style: .plain, target: target, action: rightConfig.action)
+ }
+
+ done.invocation = toolbar.doneBarButton.invocation
+ done.accessibilityLabel = toolbar.doneBarButton.accessibilityLabel
+ toolbar.doneBarButton = done
+ }
+
+ items.append(done)
+ }
+
+ // Adding button to toolBar.
+ toolbar.items = items
+
+ // Setting toolbar to keyboard.
+ if let textField = self as? UITextField {
+ textField.inputAccessoryView = toolbar
+
+ switch textField.keyboardAppearance {
+ case .dark:
+ toolbar.barStyle = UIBarStyle.black
+ default:
+ toolbar.barStyle = UIBarStyle.default
+ }
+ } else if let textView = self as? UITextView {
+ textView.inputAccessoryView = toolbar
+
+ switch textView.keyboardAppearance {
+ case .dark:
+ toolbar.barStyle = UIBarStyle.black
+ default:
+ toolbar.barStyle = UIBarStyle.default
+ }
+ }
+ }
+ }
+
+ ///------------
+ /// MARK: Right
+ ///------------
+
+ @objc public func addDoneOnKeyboardWithTarget(_ target : AnyObject?, action : Selector, shouldShowPlaceholder: Bool = false) {
+
+ addDoneOnKeyboardWithTarget(target, action: action, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder : nil))
+ }
+
+ @objc public func addDoneOnKeyboardWithTarget(_ target : AnyObject?, action : Selector, titleText: String?) {
+
+ let rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: action)
+
+ addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration)
+ }
+
+
+ @objc public func addRightButtonOnKeyboardWithImage(_ image : UIImage, target : AnyObject?, action : Selector, shouldShowPlaceholder: Bool = false) {
+
+ addRightButtonOnKeyboardWithImage(image, target: target, action: action, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder : nil))
+ }
+
+ @objc public func addRightButtonOnKeyboardWithImage(_ image : UIImage, target : AnyObject?, action : Selector, titleText: String?) {
+
+ let rightConfiguration = IQBarButtonItemConfiguration(image: image, action: action)
+
+ addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration)
+ }
+
+
+ @objc public func addRightButtonOnKeyboardWithText(_ text : String, target : AnyObject?, action : Selector, shouldShowPlaceholder: Bool = false) {
+
+ addRightButtonOnKeyboardWithText(text, target: target, action: action, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder : nil))
+ }
+
+ @objc public func addRightButtonOnKeyboardWithText(_ text : String, target : AnyObject?, action : Selector, titleText: String?) {
+
+ let rightConfiguration = IQBarButtonItemConfiguration(title: text, action: action)
+
+ addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration)
+ }
+
+ ///-----------------
+ /// MARK: Right/Left
+ ///-----------------
+
+ @objc public func addCancelDoneOnKeyboardWithTarget(_ target : AnyObject?, cancelAction : Selector, doneAction : Selector, shouldShowPlaceholder: Bool = false) {
+
+ addCancelDoneOnKeyboardWithTarget(target, cancelAction: cancelAction, doneAction: doneAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder : nil))
+ }
+
+ @objc public func addRightLeftOnKeyboardWithTarget(_ target : AnyObject?, leftButtonTitle : String, rightButtonTitle : String, leftButtonAction : Selector, rightButtonAction : Selector, shouldShowPlaceholder: Bool = false) {
+
+ addRightLeftOnKeyboardWithTarget(target, leftButtonTitle: leftButtonTitle, rightButtonTitle: rightButtonTitle, leftButtonAction: leftButtonAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder : nil))
+ }
+
+ @objc public func addRightLeftOnKeyboardWithTarget(_ target : AnyObject?, leftButtonImage : UIImage, rightButtonImage : UIImage, leftButtonAction : Selector, rightButtonAction : Selector, shouldShowPlaceholder: Bool = false) {
+
+ addRightLeftOnKeyboardWithTarget(target, leftButtonImage: leftButtonImage, rightButtonImage: rightButtonImage, leftButtonAction: leftButtonAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder : nil))
+ }
+
+ @objc public func addCancelDoneOnKeyboardWithTarget(_ target : AnyObject?, cancelAction : Selector, doneAction : Selector, titleText: String?) {
+
+ let leftConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .cancel, action: cancelAction)
+ let rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done , action: doneAction)
+
+ addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: leftConfiguration)
+ }
+
+ @objc public func addRightLeftOnKeyboardWithTarget(_ target : AnyObject?, leftButtonTitle : String, rightButtonTitle : String, leftButtonAction : Selector, rightButtonAction : Selector, titleText: String?) {
+
+ let leftConfiguration = IQBarButtonItemConfiguration(title: leftButtonTitle, action: leftButtonAction)
+ let rightConfiguration = IQBarButtonItemConfiguration(title: rightButtonTitle, action: rightButtonAction)
+
+ addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: leftConfiguration)
+ }
+
+ @objc public func addRightLeftOnKeyboardWithTarget(_ target : AnyObject?, leftButtonImage : UIImage, rightButtonImage : UIImage, leftButtonAction : Selector, rightButtonAction : Selector, titleText: String?) {
+
+ let leftConfiguration = IQBarButtonItemConfiguration(image: leftButtonImage, action: leftButtonAction)
+ let rightConfiguration = IQBarButtonItemConfiguration(image: rightButtonImage, action: rightButtonAction)
+
+ addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: leftConfiguration)
+ }
+
+ ///--------------------------
+ /// MARK: Previous/Next/Right
+ ///--------------------------
+
+ @objc public func addPreviousNextDoneOnKeyboardWithTarget (_ target : AnyObject?, previousAction : Selector, nextAction : Selector, doneAction : Selector, shouldShowPlaceholder: Bool = false) {
+
+ addPreviousNextDoneOnKeyboardWithTarget(target, previousAction: previousAction, nextAction: nextAction, doneAction: doneAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder : nil))
+ }
+
+ @objc public func addPreviousNextRightOnKeyboardWithTarget(_ target : AnyObject?, rightButtonImage : UIImage, previousAction : Selector, nextAction : Selector, rightButtonAction : Selector, shouldShowPlaceholder : Bool = false) {
+
+ addPreviousNextRightOnKeyboardWithTarget(target, rightButtonImage: rightButtonImage, previousAction: previousAction, nextAction: nextAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder : nil))
+ }
+
+ @objc public func addPreviousNextRightOnKeyboardWithTarget(_ target : AnyObject?, rightButtonTitle : String, previousAction : Selector, nextAction : Selector, rightButtonAction : Selector, shouldShowPlaceholder : Bool = false) {
+
+ addPreviousNextRightOnKeyboardWithTarget(target, rightButtonTitle: rightButtonTitle, previousAction: previousAction, nextAction: nextAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder : nil))
+ }
+
+ @objc public func addPreviousNextDoneOnKeyboardWithTarget (_ target : AnyObject?, previousAction : Selector, nextAction : Selector, doneAction : Selector, titleText: String?) {
+
+ let rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: doneAction)
+ let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage() ?? UIImage(), action: nextAction)
+ let prevConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage() ?? UIImage(), action: previousAction)
+
+ addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration)
+ }
+
+ @objc public func addPreviousNextRightOnKeyboardWithTarget(_ target : AnyObject?, rightButtonImage : UIImage, previousAction : Selector, nextAction : Selector, rightButtonAction : Selector, titleText : String?) {
+
+ let rightConfiguration = IQBarButtonItemConfiguration(image: rightButtonImage, action: rightButtonAction)
+ let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage() ?? UIImage(), action: nextAction)
+ let prevConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage() ?? UIImage(), action: previousAction)
+
+ addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration)
+ }
+
+ @objc public func addPreviousNextRightOnKeyboardWithTarget(_ target : AnyObject?, rightButtonTitle : String, previousAction : Selector, nextAction : Selector, rightButtonAction : Selector, titleText : String?) {
+
+ let rightConfiguration = IQBarButtonItemConfiguration(title: rightButtonTitle, action: rightButtonAction)
+ let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage() ?? UIImage(), action: nextAction)
+ let prevConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage() ?? UIImage(), action: previousAction)
+
+ addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration)
+ }
+}
+
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png
new file mode 100644
index 0000000..81db2ed
Binary files /dev/null and b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png differ
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png
new file mode 100644
index 0000000..dd34122
Binary files /dev/null and b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png differ
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png
new file mode 100644
index 0000000..cfc40d6
Binary files /dev/null and b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png differ
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png
new file mode 100644
index 0000000..849b991
Binary files /dev/null and b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png differ
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png
new file mode 100644
index 0000000..c8b9a87
Binary files /dev/null and b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png differ
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png
new file mode 100644
index 0000000..95c4397
Binary files /dev/null and b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png differ
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@2x.png b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@2x.png
new file mode 100644
index 0000000..8ec96a9
Binary files /dev/null and b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@2x.png differ
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@3x.png b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@3x.png
new file mode 100644
index 0000000..9304f50
Binary files /dev/null and b/iOSClientApp/Pods/IQKeyboardManagerSwift/IQKeyboardManagerSwift/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@3x.png differ
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/LICENSE.md b/iOSClientApp/Pods/IQKeyboardManagerSwift/LICENSE.md
new file mode 100644
index 0000000..c17c107
--- /dev/null
+++ b/iOSClientApp/Pods/IQKeyboardManagerSwift/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2013-2017 Iftekhar Qurashi
+
+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.
diff --git a/iOSClientApp/Pods/IQKeyboardManagerSwift/README.md b/iOSClientApp/Pods/IQKeyboardManagerSwift/README.md
new file mode 100644
index 0000000..b3900c0
--- /dev/null
+++ b/iOSClientApp/Pods/IQKeyboardManagerSwift/README.md
@@ -0,0 +1,210 @@
+
+
+
+IQKeyboardManager
+
+
+
+
+[](https://travis-ci.org/hackiftekhar/IQKeyboardManager)
+
+
+Often while developing an app, We ran into an issues where the iPhone keyboard slide up and cover the `UITextField/UITextView`. `IQKeyboardManager` allows you to prevent issues of the keyboard sliding up and cover `UITextField/UITextView` without needing you to enter any code and no additional setup required. To use `IQKeyboardManager` you simply need to add source files to your project.
+
+
+#### Key Features
+
+1) `**CODELESS**, Zero Lines Of Code`
+
+2) `Works Automatically`
+
+3) `No More UIScrollView`
+
+4) `No More Subclasses`
+
+5) `No More Manual Work`
+
+6) `No More #imports`
+
+`IQKeyboardManager` works on all orientations, and with the toolbar. There are also nice optional features allowing you to customize the distance from the text field, add the next/previous done button as a keyboard UIToolbar, play sounds when the user navigations through the form and more.
+
+
+## Screenshot
+[](http://youtu.be/6nhLw6hju2A)
+[](http://youtu.be/6nhLw6hju2A)
+
+## GIF animation
+[](http://youtu.be/6nhLw6hju2A)
+
+## Video
+
+
+
+## Tutorial video by @rebeloper ([#1135](https://github.com/hackiftekhar/IQKeyboardManager/issues/1135))
+
+@rebeloper demonstrated two videos on how to implement **IQKeyboardManager** at it's core:
+
+
+
+https://www.youtube.com/playlist?list=PL_csAAO9PQ8aTL87XnueOXi3RpWE2m_8v
+
+## Warning
+
+- **If you're planning to build SDK/library/framework and wants to handle UITextField/UITextView with IQKeyboardManager then you're totally going on wrong way.** I would never suggest to add **IQKeyboardManager** as **dependency/adding/shipping** with any third-party library, instead of adding **IQKeyboardManager** you should implement your own solution to achieve same kind of results. **IQKeyboardManager** is totally designed for projects to help developers for their convenience, it's not designed for **adding/dependency/shipping** with any **third-party library**, because **doing this could block adoption by other developers for their projects as well(who are not using IQKeyboardManager and implemented their custom solution to handle UITextField/UITextView thought the project).**
+- If **IQKeyboardManager** conflicts with other **third-party library**, then it's **developer responsibility** to **enable/disable IQKeyboardManager** when **presenting/dismissing** third-party library UI. Third-party libraries are not responsible to handle IQKeyboardManager.
+
+## Requirements
+[]()
+
+| | Language | Minimum iOS Target | Minimum Xcode Version |
+|------------------------|----------|--------------------|-----------------------|
+| IQKeyboardManager | Obj-C | iOS 8.0 | Xcode 8.2.1 |
+| IQKeyboardManagerSwift | Swift | iOS 8.0 | Xcode 8.2.1 |
+| Demo Project | | | Xcode 9.3 |
+
+**Note**
+- 3.3.7 is the last iOS 7 supported version.
+
+#### Swift versions support
+
+| Swift | Xcode | IQKeyboardManagerSwift |
+|-------------------|-------|------------------------|
+| 4.2, 4.0, 3.2, 3.0| 10.0 | >= 6.0.4 |
+| 4.0, 3.2, 3.0 | 9.0 | 5.0.0 |
+| 3.1 | 8.3 | 4.0.10 |
+| 3.0 (3.0.2) | 8.2 | 4.0.8 |
+| 2.2 or 2.3 | 7.3 | 4.0.5 |
+| 2.1.1 | 7.2 | 4.0.0 |
+| 2.1 | 7.2 | 3.3.7 |
+| 2.0 | 7.0 | 3.3.3.1 |
+| 1.2 | 6.3 | 3.3.1 |
+| 1.0 | 6.0 | 3.3.2 |
+
+Installation
+==========================
+
+#### Installation with CocoaPods
+
+[](http://cocoadocs.org/docsets/IQKeyboardManager)
+
+***IQKeyboardManager (Objective-C):*** IQKeyboardManager is available through [CocoaPods](http://cocoapods.org), to install
+it simply add the following line to your Podfile: ([#9](https://github.com/hackiftekhar/IQKeyboardManager/issues/9))
+
+```ruby
+pod 'IQKeyboardManager' #iOS8 and later
+
+pod 'IQKeyboardManager', '3.3.7' #iOS7
+```
+
+***IQKeyboardManager (Swift):*** IQKeyboardManagerSwift is available through [CocoaPods](http://cocoapods.org), to install
+it simply add the following line to your Podfile: ([#236](https://github.com/hackiftekhar/IQKeyboardManager/issues/236))
+
+*Swift 4.2, 4.0, 3.2, 3.0 (Xcode 9)*
+
+```ruby
+pod 'IQKeyboardManagerSwift'
+```
+
+*Or you can choose version you need based on Swift support table from [Requirements](README.md#requirements)*
+
+```ruby
+pod 'IQKeyboardManagerSwift', '5.0.0'
+```
+
+In AppDelegate.swift, just import IQKeyboardManagerSwift framework and enable IQKeyboardManager.
+
+```swift
+import IQKeyboardManagerSwift
+
+@UIApplicationMain
+class AppDelegate: UIResponder, UIApplicationDelegate {
+
+ var window: UIWindow?
+
+ func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
+
+ IQKeyboardManager.shared.enable = true
+
+ return true
+ }
+}
+```
+
+#### Installation with Carthage
+
+[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
+
+You can install Carthage with [Homebrew](http://brew.sh/) using the following command:
+
+```bash
+$ brew update
+$ brew install carthage
+```
+
+To integrate `IQKeyboardManger` or `IQKeyboardManagerSwift` into your Xcode project using Carthage, specify it in your `Cartfile`:
+
+```ogdl
+github "hackiftekhar/IQKeyboardManager"
+```
+
+Run `carthage` to build the frameworks and drag the appropriate framework (`IQKeyboardManager.framework` or `IQKeyboardManagerSwift.framework`) into your Xcode project according to your need. Make sure to add only one framework and not both.
+
+
+#### Installation with Source Code
+
+[]()
+
+
+
+***IQKeyboardManager (Objective-C):*** Just ***drag and drop*** `IQKeyboardManager` directory from demo project to your project. That's it.
+
+***IQKeyboardManager (Swift):*** ***Drag and drop*** `IQKeyboardManagerSwift` directory from demo project to your project
+
+In AppDelegate.swift, just enable IQKeyboardManager.
+
+```swift
+@UIApplicationMain
+class AppDelegate: UIResponder, UIApplicationDelegate {
+
+ var window: UIWindow?
+
+ func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
+
+ IQKeyboardManager.shared.enable = true
+
+ return true
+ }
+}
+```
+
+Migration Guide
+==========================
+- [IQKeyboardManager 6.0.0 Migration Guide](https://github.com/hackiftekhar/IQKeyboardManager/wiki/IQKeyboardManager-6.0.0-Migration-Guide)
+
+Other Links
+==========================
+
+- [Known Issues](https://github.com/hackiftekhar/IQKeyboardManager/wiki/Known-Issues)
+- [Manual Management Tweaks](https://github.com/hackiftekhar/IQKeyboardManager/wiki/Manual-Management)
+- [Properties and functions usage](https://github.com/hackiftekhar/IQKeyboardManager/wiki/Properties-&-Functions)
+
+## Flow Diagram
+[](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/master/Screenshot/IQKeyboardManagerFlowDiagram.jpg)
+
+If you would like to see detailed Flow diagram then see [Detailed Flow Diagram](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerCFD.jpg).
+
+
+LICENSE
+---
+Distributed under the MIT License.
+
+Contributions
+---
+Any contribution is more than welcome! You can contribute through pull requests and issues on GitHub.
+
+Author
+---
+If you wish to contact me, email at: hack.iftekhar@gmail.com
diff --git a/iOSClientApp/Pods/Manifest.lock b/iOSClientApp/Pods/Manifest.lock
new file mode 100644
index 0000000..bfd1c10
--- /dev/null
+++ b/iOSClientApp/Pods/Manifest.lock
@@ -0,0 +1,53 @@
+PODS:
+ - FGRoute (1.0.4)
+ - IQKeyboardManagerSwift (6.2.0)
+ - "NSObject+Rx (4.4.1)":
+ - RxSwift (~> 4.3)
+ - RxAtomic (4.4.0)
+ - RxBluetoothKit (5.1.4):
+ - RxSwift (~> 4.0)
+ - RxCocoa (4.4.0):
+ - RxSwift (~> 4.0)
+ - RxGesture (2.1.0):
+ - RxCocoa (~> 4.4.0)
+ - RxSwift (~> 4.4.0)
+ - RxSwift (4.4.0):
+ - RxAtomic (~> 4.4)
+ - SwiftyJSON (4.2.0)
+
+DEPENDENCIES:
+ - FGRoute
+ - IQKeyboardManagerSwift
+ - "NSObject+Rx"
+ - RxBluetoothKit
+ - RxCocoa
+ - RxGesture
+ - RxSwift
+ - SwiftyJSON
+
+SPEC REPOS:
+ https://github.com/cocoapods/specs.git:
+ - FGRoute
+ - IQKeyboardManagerSwift
+ - "NSObject+Rx"
+ - RxAtomic
+ - RxBluetoothKit
+ - RxCocoa
+ - RxGesture
+ - RxSwift
+ - SwiftyJSON
+
+SPEC CHECKSUMS:
+ FGRoute: 5a1da5e6702e672b07409904b0db50159c5711be
+ IQKeyboardManagerSwift: b07ccf9d8cafe993dcd6cb794eb4ba34611a0c4e
+ "NSObject+Rx": 9884a92f19b610795c431e10b4e601913b59c9e9
+ RxAtomic: eacf60db868c96bfd63320e28619fe29c179656f
+ RxBluetoothKit: d18f7beb5fd4d2b24659d57548e38d5d2fac885b
+ RxCocoa: df63ebf7b9a70d6b4eeea407ed5dd4efc8979749
+ RxGesture: 7f6dfb45dbde06e618c24442d38493e3144f2c95
+ RxSwift: 5976ecd04fc2fefd648827c23de5e11157faa973
+ SwiftyJSON: c4bcba26dd9ec7a027fc8eade48e2c911f229e96
+
+PODFILE CHECKSUM: 85e404c75bd456164d24ff8ad4af15ad8f6a9550
+
+COCOAPODS: 1.5.3
diff --git a/iOSClientApp/Pods/NSObject+Rx/HasDisposeBag.swift b/iOSClientApp/Pods/NSObject+Rx/HasDisposeBag.swift
new file mode 100644
index 0000000..158e09a
--- /dev/null
+++ b/iOSClientApp/Pods/NSObject+Rx/HasDisposeBag.swift
@@ -0,0 +1,44 @@
+import Foundation
+import RxSwift
+import ObjectiveC
+
+fileprivate var disposeBagContext: UInt8 = 0
+
+/// each HasDisposeBag offers a unique RxSwift DisposeBag instance
+public protocol HasDisposeBag: class {
+
+ /// a unique RxSwift DisposeBag instance
+ var disposeBag: DisposeBag { get set }
+}
+
+extension HasDisposeBag {
+
+ func synchronizedBag( _ action: () -> T) -> T {
+ objc_sync_enter(self)
+ let result = action()
+ objc_sync_exit(self)
+ return result
+ }
+
+ public var disposeBag: DisposeBag {
+ get {
+ return synchronizedBag {
+ if let disposeObject = objc_getAssociatedObject(self, &disposeBagContext) as? DisposeBag {
+ return disposeObject
+ }
+ let disposeObject = DisposeBag()
+ objc_setAssociatedObject(self, &disposeBagContext, disposeObject, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+ return disposeObject
+ }
+ }
+
+ set {
+ synchronizedBag {
+ objc_setAssociatedObject(self, &disposeBagContext, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+ }
+ }
+ }
+}
+
+
+
diff --git a/iOSClientApp/Pods/NSObject+Rx/LICENSE b/iOSClientApp/Pods/NSObject+Rx/LICENSE
new file mode 100644
index 0000000..06c3128
--- /dev/null
+++ b/iOSClientApp/Pods/NSObject+Rx/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Ash Furrow
+
+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.
+
diff --git a/iOSClientApp/Pods/NSObject+Rx/NSObject+Rx.swift b/iOSClientApp/Pods/NSObject+Rx/NSObject+Rx.swift
new file mode 100644
index 0000000..c2d75c6
--- /dev/null
+++ b/iOSClientApp/Pods/NSObject+Rx/NSObject+Rx.swift
@@ -0,0 +1,37 @@
+import Foundation
+import RxSwift
+import ObjectiveC
+
+fileprivate var disposeBagContext: UInt8 = 0
+
+extension Reactive where Base: AnyObject {
+ func synchronizedBag( _ action: () -> T) -> T {
+ objc_sync_enter(self.base)
+ let result = action()
+ objc_sync_exit(self.base)
+ return result
+ }
+}
+
+public extension Reactive where Base: AnyObject {
+
+ /// a unique DisposeBag that is related to the Reactive.Base instance only for Reference type
+ public var disposeBag: DisposeBag {
+ get {
+ return synchronizedBag {
+ if let disposeObject = objc_getAssociatedObject(base, &disposeBagContext) as? DisposeBag {
+ return disposeObject
+ }
+ let disposeObject = DisposeBag()
+ objc_setAssociatedObject(base, &disposeBagContext, disposeObject, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+ return disposeObject
+ }
+ }
+
+ set {
+ synchronizedBag {
+ objc_setAssociatedObject(base, &disposeBagContext, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+ }
+ }
+ }
+}
diff --git a/iOSClientApp/Pods/NSObject+Rx/Readme.md b/iOSClientApp/Pods/NSObject+Rx/Readme.md
new file mode 100644
index 0000000..81d8e53
--- /dev/null
+++ b/iOSClientApp/Pods/NSObject+Rx/Readme.md
@@ -0,0 +1,77 @@
+[](https://circleci.com/gh/RxSwiftCommunity/NSObject-Rx/tree/master)
+
+NSObject+Rx
+===========
+
+If you're using [RxSwift](https://github.com/ReactiveX/RxSwift), you've probably encountered the following code more than a few times.
+
+```swift
+class MyObject: Whatever {
+ let disposeBag = DisposeBag()
+
+ ...
+}
+```
+
+You're actually not the only one; it has been typed many, many times.
+
+[](https://github.com/search?q=let+disposeBag+%3D+DisposeBag%28%29&type=Code&utf8=✓)
+
+Instead of adding a new property to every object, use this library to add it for you, to any subclass of `NSObject`.
+
+```swift
+thing
+ .bind(to: otherThing)
+ .disposed(by: rx.disposeBag)
+```
+
+Sweet.
+
+It'll work just like a property: when the instance is deinit'd, the `DisposeBag` gets disposed. It's also a read/write property, so you can use your own, too.
+
+If you want to add a DisposeBag to an Object that does not inherit from NSObject, you can also implement the protocol `HasDisposeBag`, and you're good to go. This protocol provides a default DisposeBag called `disposeBag`.
+
+Installing
+----------
+
+#### CocoaPods
+
+Add to your `Podfile`:
+
+```ruby
+pod 'NSObject+Rx'
+```
+
+And that'll be 👌
+
+#### Carthage
+
+Add to `Cartfile`:
+```
+github "RxSwiftCommunity/NSObject-Rx"
+```
+Add frameworks to your project (no need to "copy items if needed")
+
+Run `carthage update` or `carthage update --platform ios` if you target iOS only
+
+Add run script build phase `/usr/local/bin/carthage copy-frameworks`
+with input files being:
+
+```
+$(SRCROOT)/Carthage/Build/iOS/RxSwift.framework
+$(SRCROOT)/Carthage/Build/iOS/NSObject_Rx.framework
+```
+
+And rule ✌️
+
+Contributing
+------------
+
+Source files are in the root directory. We use CocoaPods to develop, check out the unit tests in the Demo project.
+
+License
+-------
+
+MIT obvs.
+
+
diff --git a/iOSClientApp/Pods/Pods.xcodeproj/project.pbxproj b/iOSClientApp/Pods/Pods.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..8703289
--- /dev/null
+++ b/iOSClientApp/Pods/Pods.xcodeproj/project.pbxproj
@@ -0,0 +1,3555 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 008BF84AFE1ED9DEF8DFEF392FA8895F /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14F31B35D071A8D07F52A7A8EC2AF4C1 /* Optional.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 02502E678FDA80A2B972C0872C0D317E /* SkipUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46320E6B4CCA28A689E4B9FF35947CDC /* SkipUntil.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 03CDD3281A6A223A630CD658CF21EAAC /* SingleAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = A15C7FFF19095B787E7BE253CBDEC8BE /* SingleAsync.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 03FEC0760B44077949950237A9F9DA8A /* BehaviorRelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 998801D3139D0CF548266D9003929CBE /* BehaviorRelay.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 040CB83A00D76B78BDC39B20A7D7FA24 /* ScannedPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60FEF1E298AAE6A4EA9A6842A3F18C7C /* ScannedPeripheral.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 041AB8122F8950D4B1EC9EE1487ED110 /* Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759FD5097F5410BD5E5D3A68884FDC78 /* Deprecated.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 04536AE589DCB6A5C26614657836679A /* Pods-iOSClientApp-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D2E0E341E971FFACC0641BF511381054 /* Pods-iOSClientApp-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 05130244A98926B2B389A801D3F72593 /* UIBarButtonItem+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEEE02B7E96EDC98BBAD7DBFBE97847 /* UIBarButtonItem+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 053678BAC0DC30172ECFB073D2692871 /* UIScreenEdgePanGestureRecognizer+RxGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = E049133A3196908E5F655F5D142E48DB /* UIScreenEdgePanGestureRecognizer+RxGesture.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 059B55CC1504576665E05A1A66DD4D33 /* RxMutableBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9452D28AB829CC7F1777184436091A60 /* RxMutableBox.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 0647B5670DF40D38F2C721A2048679A3 /* SharedSequence+Operators+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC83B6B9DCD01E7D1B01CAE0317D5035 /* SharedSequence+Operators+arity.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 06BA4D18DF4A03B29217526CFA824C61 /* FGRoute-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 945801FF03AA585397D8E0E1CC08186B /* FGRoute-dummy.m */; };
+ 08AEFB92F5B3AD8E1BAE6E3F4967652A /* NSLayoutConstraint+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A1C3A63AE29B2F3F1E49013A9857E44 /* NSLayoutConstraint+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 08C7103E0C0BF1281755682F4FD6F131 /* PeripheralManager+RestoredState.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED059335887AED3555048873100D7AA1 /* PeripheralManager+RestoredState.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 0B6C88361F21E77C67D3AAB72822A443 /* RxCocoa.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DB1D18BB7FDEA56C71CB4952A07CDC /* RxCocoa.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 0D135BAAFB412EF0174C286AFA70A43F /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D898A2EC801C4D45219E85C4CEF8379 /* Queue.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 0DE53DD46CB8B5F2A733166B0DE368C2 /* Buffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D06E24A253B6F53B52E8320F0A1439 /* Buffer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 0E04EF4F70CFB9C2D22D3C95D49EB557 /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A4659A114AFB56C78DE6B137199D50 /* Range.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 0EC06C2E1340E6A8BA78660168F073E5 /* _RXDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 551D8F0EEF9D3CB923FFC188BBF7B42D /* _RXDelegateProxy.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 0ED494995534734885893497DD05C8D0 /* SchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6B72E535DD90A660E43E313D07D0F83 /* SchedulerType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 0EEA900AD6B41B9DFEF54B81F7E59EF9 /* RxCocoaObjCRuntimeError+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6BAFFDEFFADA1E85B387B681FFF6306 /* RxCocoaObjCRuntimeError+Extensions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 0F8B62980E15E4853EE35F55240B0098 /* RxCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = C88B2B335B0195A177212F5F9E03F1F9 /* RxCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 0FCDAA063B3EB0BDCB40DD4F03D6DEA2 /* FGRoute-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DD0DE42833ED52BE7D2F608F477DA3A4 /* FGRoute-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1020220BED85A0D545AEFFC00F1D82D3 /* ControlProperty+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCFE02EA050C81DB07A8C6B82C161C4D /* ControlProperty+Driver.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 1060AF3C9DB4A889541FE0957B781D7B /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CDF4038CF743A6986711786D58488BC /* Disposable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 10645B47DB61A8847FA7608492DCA03E /* UIStepper+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0B868CA1BCFFCBA80E44434B3200BBC /* UIStepper+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 10DEBA6589AFEBD7F3B92FBA70B1838C /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9926339546996DD3A18950C778D76337 /* Observable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 1157495287870F792281560EC3A89834 /* RxAtomic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D889790F2AC0028461CB309D20B71E57 /* RxAtomic.framework */; };
+ 1179683C7B762CE774873C70CCCD7695 /* DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9528FF3784E2BCB3BE0FF95F480B0201 /* DistinctUntilChanged.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 11AF7EFEEFF7027DE8DAC6BDD2004672 /* GroupedObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC96F2DF23867DD64AC053CF7E2BC8A4 /* GroupedObservable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 124FF2683CC2E851A634CA23F41BEA13 /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 556D579D4E89F22D4317262EB2FD52B3 /* Debug.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 12573BD42300A9514C04E0D5E5847367 /* Array+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 963D2A809D8272EC098EEFD595FC2516 /* Array+Utils.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 12C32CC03DA3B1C3E98CEE9ECB5A8320 /* ToArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1206C9D236C988E9B337AAB34C16FCBD /* ToArray.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 132FDCE333AA378DB7BE8E30326DE683 /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F52A5C582B74766E6022A931472B68 /* Service.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 1437B5C10CCDE0811143E2A3425F8B76 /* RxTableViewDataSourcePrefetchingProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56C60CE65CE2DB7C1C3B41AFD5BB82A6 /* RxTableViewDataSourcePrefetchingProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 1453202134ADD142184B571C6032E596 /* FGRoute.h in Headers */ = {isa = PBXBuildFile; fileRef = 37E4D46320A6E7318D4009922AFA99FC /* FGRoute.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1632665D8478F07330472E848460B902 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A790CC5FE7B85B1FB7E71391B23AF6F /* Zip.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 16EFED0E0AE37E79944B477CAACAA27D /* Zip+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EBDC70F05265F05FD41A237231041C3 /* Zip+Collection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 18821401EF0C5191B4135983AEA14205 /* RxSearchBarDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64B9BFDBD83B25BB744521A41E5A4D51 /* RxSearchBarDelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 18EABC973FF44A560049DE1D38C11650 /* UILabel+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83F4B111B49707AE3EBF1C258BD05296 /* UILabel+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 197566B3014555E4A1E0E6B35D2CF60E /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4315DB5366B36EDD6635C07DCF749D7 /* Event.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 199FAB683F1A45A0AF2FCD4FD08FCB78 /* GroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83ED96D8A4692E605BE9BF51D56D4EA5 /* GroupBy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 1A888199D363CDFD1F64AFA4DAEBAE2A /* Completable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8AA805D3EEC6BC1071A77FEDE1EE037 /* Completable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 1ADCC5650A2368CACF9C8EB3794373DD /* _RXObjCRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = F004C9DC85C8776DD437EB43C1E24757 /* _RXObjCRuntime.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 1BD5C1E8AD0C710F18DDE9E201116FA8 /* InvocableScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DD3C8A87038B3DB89506AB9496A396E /* InvocableScheduledItem.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 1DFAD873061FB9B7F509CA74B548BE84 /* RestoredState.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0893CE8FA43289D109972D59D3FCB83 /* RestoredState.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 1E7581AB1DE03C4E20C2B246524E87CC /* UIGestureRecognizer+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A283F0923498009994146C4C5145BC97 /* UIGestureRecognizer+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 1F745A0AEBF4FCAE5097B67718944C76 /* LockOwnerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29BCDD1861343F8F3A7DAAF4949445F2 /* LockOwnerType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 217B0CFE8FA59969FF21FBAFE767FED7 /* Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FEB106AEF61D14A0726C851DCDAC497 /* Take.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 21A63E0B2A7C42AD3A06AD6163C67120 /* Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D70383C9F44135ED7D76F5008098AD1 /* Generate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 23089C12F461D35DAF5297FE48D578F0 /* CBPeripheralManagerDelegateWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B74052A628D5AFF815949AC57B6BDCCF /* CBPeripheralManagerDelegateWrapper.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 232D35855D2AADB0BB4D746C180AF50B /* CentralManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A192BB8B3ADFE7CFBE9F77A006673F /* CentralManager.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2347F7E4F46528342A6C251B8454AA95 /* Enumerated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AFDC2BD8B88034580A19EDA1EF3340F /* Enumerated.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 234966C3AAA0A9825FB54DB70CB2A2E0 /* First.swift in Sources */ = {isa = PBXBuildFile; fileRef = BACA603D2360DF8F21DDC129756686C2 /* First.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2462E21369321CCA4D63D55F96194147 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 858C516ABB973B0499FFB214AD5752A4 /* Foundation.framework */; };
+ 2491DFBD7A664564FD7D0CC1C3159244 /* DelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F24398A1311A9A41A8FC573FC7BE0AB4 /* DelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 24BB6E6594FF87B5F847F40893E930C7 /* RxWebViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 388ED66774BC08CD0D36B3B50213F841 /* RxWebViewDelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 26C3E20C02B3230B8157A36B5E24FD0A /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE8330CEE0325659CFEB6A9ADF2F1358 /* SwiftyJSON.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 27044A230A87352A0E192659B371CB71 /* UIWebView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1D410FA0EF5AFCFBE8DE098F3DF7169 /* UIWebView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 283C2DC1C4AAED94E46374CD32F8EFFB /* IQKeyboardManagerConstantsInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C5C5DD49B51D4BEAF2E9874175029BA /* IQKeyboardManagerConstantsInternal.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2877B1D214E1E5520EC24F761F332B89 /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = F48969C2A437CAF88A6A2ED7858963C1 /* SwiftSupport.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 28DA33042FF17F3F32644EC5665911D9 /* AddRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC558E7D283D2D55801095C75C1D015 /* AddRef.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2966C76AE5421B4D3EBC7E46023416F0 /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BF725A353E5E79C37E165BFA666453 /* DispatchQueue+Extensions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 29B49ADB90CAD48BB2925AF976771095 /* RxTableViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = E96DE7EC2CE234BC67C6DDB9AC62E42B /* RxTableViewDelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 29D25C218CA5BCB76FCC318C0570CDA2 /* MainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35F962AF01252B3285DDC2C8B985EFCB /* MainScheduler.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2A1792B8DFF48823635278523953ADAE /* Skip.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED8614D223B140850A2F2F5B96CCBAAC /* Skip.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2A42A2EBBEC263B1444869F14260A58F /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = C53351204CA2A11E36BEB32B18D712A8 /* IQUIView+IQKeyboardToolbar.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2A5C068682267432996B71A7285CD0BA /* RxPickerViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52C9050A8AAD02F3DFC773863740A163 /* RxPickerViewDataSourceType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2A6EBADB114AA5FF4233A6E10BE9E9A0 /* UIButton+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = D33439AD8EC772D7BB4661C2001304D5 /* UIButton+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2AB57BB17E9D59E41410F098AE8855DD /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A54B6DBA7D6348DEA931F0167983A2C9 /* ConnectableObservableType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2B0A55B8A9BDE1BB6B79B5627DF8DE9A /* StartAdvertisingResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6E98023B45D77F46077F67C8F4D9673 /* StartAdvertisingResult.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2B19A01A429006D06F2799D057375EC6 /* _RXKVOObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5660B6B96B35DCB312176B61410A6492 /* _RXKVOObserver.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2B571E45258552B2FF4FAB406BE9F4B0 /* UITabBar+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDACD4B40EF8ED002BECE0D1A7067270 /* UITabBar+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2B801ED9E2A7E3BB6EB5117C5418EA41 /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B68F05049F098E5D6C23B42197736A83 /* Platform.Darwin.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2C0A9191C6383A06D02FE949087A1589 /* InvocableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5ED96C7EB6A811CC26B5475D1DA6FE2 /* InvocableType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2C6CFE779714099A2C996EDB48D1A05D /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02572F4CBADE68726A1A64AEF23D47A2 /* RxSwift.framework */; };
+ 2CADB96F37612EC089F8C9B0B582A80D /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AE3449A5CD7054C078F7ECF9CDB5B61 /* Sample.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2D6FFBC4C75FFBB8A4B2B15C1075D612 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3FBEB2828EB59624AAFCF746380971C /* IQBarButtonItem.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2E9D13531764B3B2E0C5E706FD34C886 /* ControlEvent+Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3ECA5020E8642473501B01484CE96A2 /* ControlEvent+Signal.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2F4A1E61D11BCBEE57D24A7F9188D804 /* UIPinchGestureRecognizer+RxGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A6F4F05D86BA0C238087C4004EF7E3 /* UIPinchGestureRecognizer+RxGesture.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 2FD229B1CD6E56584787579AC0E1F968 /* ScheduledItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52C9D88AF62F4886FAD787A44851EE21 /* ScheduledItemType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 31742F15F7BCAF4C31960289F613223F /* NSButton+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C70AD59572AD797D77C88BA30436DAED /* NSButton+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 31C534D449A2015251436BBECFFFBA31 /* AnonymousObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0E6091CB81E90217C9E797026B4EC72 /* AnonymousObserver.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 33859B62A0EF226582C5781B29A9F869 /* RxGesture-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 63EC0EC2DD903A8D8FEEEB7484F4E502 /* RxGesture-dummy.m */; };
+ 33A1654F010AA9717930246A1B7F6975 /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4C6F9E4CD50B818EDECD64788BBDFC4 /* Amb.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 33B2E1393A412440D5455B97C30BA76C /* CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75CDFC5F3E77D747CCE3E6CCED2D528C /* CombineLatest+arity.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3418E8758B4BE32171D486DEA967AA88 /* UICollectionView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20ADEC86D1DCEFAD018A1E0DCA7BE19A /* UICollectionView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 35DE8C6993AC627A7F2D6C9FDC0CAE20 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C53CB79D390E079326664AB0C1EDB61 /* Queue.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 36DF01BA7C98605F56DA99B42EF3EF22 /* NSSlider+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DC3F7338C7D35F2124BD14937BA43A4 /* NSSlider+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 378F95C49D1272B3C10757578B268DF8 /* ControlEvent+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 309FB1627065C2A97C1DA041BEE00A82 /* ControlEvent+Driver.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 37935F17D113590BFB9EA7E868D339B2 /* UIViewController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D72D470BCFBF6109C950C66871BB178 /* UIViewController+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 37B2E5BAF6E3C37AA395C7421674B5EE /* RxBluetoothKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B29D4FBFE31F2DA51ED717D9305A55EE /* RxBluetoothKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 37D29276DAD566C21F84A77DCF7E6FE6 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE58EC8E963D5ED54BF29352EFE6BBE /* Errors.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 38415D70EC941F273A048F29D34B62BB /* Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2C7915B3AE223B1CA127490D85F197 /* Zip+arity.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 385E29B5364ADF3554560CDA4A239685 /* RxTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2299364694332CB88FF23F31C0DC73FF /* RxTarget.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 38F449E5440D50DB11A84FE9E35A8C8D /* NSView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25CB599A9BCF4420A9E0C265123F84E6 /* NSView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 391D3F9CAB52D986922EF51710D6AE29 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 40D680353D05B7984C5D8C53B4A20F05 /* RxCocoa.framework */; };
+ 3943AE678914F99B5BFA539374AFBD13 /* FGRoute.m in Sources */ = {isa = PBXBuildFile; fileRef = F9BA1FE9C5D2725839159B6A598CA296 /* FGRoute.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 395CC27E70F8798FA348EC194145797F /* ObservableConvertibleType+SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63264940B3AD13650EEFCFC279088104 /* ObservableConvertibleType+SharedSequence.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3A93D137EB62F001CBC275BD8B19CD51 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B31B0F4F893D2080A45147E651EAE161 /* CoreGraphics.framework */; };
+ 3AC0944FA2B2ADB1CF4F5F6E950A899A /* Observable+Absorb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC1175366391D594ECC9A3AB4486F05 /* Observable+Absorb.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3ADDE6704F010726FF47AD2DD68D8499 /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FA5BAA8FC03C1F7AE3F3368BA1A9DC6 /* Lock.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3BA76ACD1697331FC89A8B34C6137EEB /* PrimitiveSequence+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7019B1386FB39A9FD7A453D0494A460E /* PrimitiveSequence+Zip+arity.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3C486075C1A7F0DAA982EE0A22B82E28 /* RxTabBarControllerDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2C21E5D2721A251E27C95068CFBC6E /* RxTabBarControllerDelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3D179BDE9A17D19898EA7BF7427FE314 /* PeripheralProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476BEB82615229CFFDF6876BAB5C2BD5 /* PeripheralProvider.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3D759ADA46C07929C3A848B10F088BDD /* ControlEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1DF3E9860443436CC4D9DB370D2E638 /* ControlEvent.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3D781968384698A638FEA29CC203CA77 /* AsSingle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DAFAF5BD53D69753591AF43FA6A0C39 /* AsSingle.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3DC9D7CFCB1F0E31A07D415D48758484 /* RxNavigationControllerDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25C917541BFD5C5897F72E17CBA4AB32 /* RxNavigationControllerDelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3E8DF8DEA1F5ACF3962A0FC19BB112F3 /* NopDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5EDCB64EFAF9D104A51006AF3E39837 /* NopDisposable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3EF3B10153A9998E1DF70F11964245DF /* AtomicInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25E4747909033B7D3890F6D924E9C69E /* AtomicInt.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3F2CB1310B38365D00629ABA05368399 /* ConcurrentDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DC5359CDF37DF83629AA0BA24DA39DF /* ConcurrentDispatchQueueScheduler.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 3F2FD08AD212D7B55DC033F7E4EF6DB6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 858C516ABB973B0499FFB214AD5752A4 /* Foundation.framework */; };
+ 4009C98A3FC348AD445D4BBD8A5F1316 /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 071EB136E4DBDB75AEFD71D01EFF5665 /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 403CD67D4D0F5CB249655DEA741CDBA0 /* PublishSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF698BF68FE92BE962F239C0F013B0B0 /* PublishSubject.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 409309B68BA8A877F40EA6BE36819A65 /* DeviceIdentifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1EE6D01FDF644550BE8E728FBEFAE3 /* DeviceIdentifiers.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 41BAC2F7B0FEB502DA0DE4B31677FAFC /* CurrentThreadScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5779E37ACF870FDCDA584A60DFA42BBB /* CurrentThreadScheduler.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 41E9F14DE8803AFB943B7EFE911BF4C3 /* Producer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A16FB56B1D338C3DA7D7610D3953A971 /* Producer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 42DDA53564A8970A6E62FB97D325A61F /* Descriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60947C2B4DA49CD609394E214783D009 /* Descriptor.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 436840B49E27394611652DFDBA522D31 /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5EA16F9EC1C3B4495979828C364C27A /* PriorityQueue.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 44B57ABAC8B23D4E727032CBCCC49F0C /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B464AE19B99CEDAD4A8A2EAE881808A /* PriorityQueue.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 44FCEC9979B307EE62C1BABA72E0B76E /* AnyObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 957DC450165DB0904367E197A391EF6C /* AnyObserver.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 4512E733A416EDBBC16D47AA78EE283A /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D6560CB7345D655B59BD24CA6DFC6B3 /* IQTitleBarButtonItem.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 4521771C09AEEABE7CC64AB22D46BA14 /* RxAtomic.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E97C991A776710C6ACF06347645C5B6 /* RxAtomic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 45C73CADB067A1F24668E8C5EA00D6B7 /* SharedSequence+Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F0431720E925FFB47E77FF7585D4022 /* SharedSequence+Operators.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 46118EBEAE6DF7C7BB8AED64567B828C /* Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3629FBC016D6090491B5A9C9A86E03AB /* Catch.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 462F18543EFE621B67B964D0E862CF4A /* UISearchController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F017A60FE3BCBE7FE561082A44E48B /* UISearchController+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 468C7543BD5285EDD295933898F7052A /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E7C5189810531F2183204C2C9B98231 /* Bag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 4782F53A5E68F75ED29BFC7805098FB9 /* UISwitch+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37FAD497FE9EAF85447C3018BD5A11C3 /* UISwitch+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 4A6833A85F9838620CF313B688EEFAFF /* IpHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B61CF886E364ABA359987AA3C31DC9 /* IpHelper.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 4C429F4B2FCDDAC69925A47E065C9821 /* UITableView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B98A98829D98C18C9ED9466CC38E440C /* UITableView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 4C9EFB4D94FAF12EB3FF9AAB777F05B9 /* StartWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 253FDD55B614B1CC1DC125552F91695D /* StartWith.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 4CFB15DD257EDA6A59418768BE876985 /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE81DAB47311F7E8FC0B39DB9436AFB2 /* ObserveOn.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 4D1790DE32542049195AD0735144B510 /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7996C33DC851F5608315606998FD99E0 /* IQToolbar.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 4DBFD959FEDE4E82B85CE1A3EF514241 /* AsyncSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FD2F7ADBD2D5533A887EADC23AA57E7 /* AsyncSubject.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 4E62AD2260838CB3048176E5524FB6F6 /* RxTabBarDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5785887C13D30325BF3B7D32524252C1 /* RxTabBarDelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 4E64EC953003BE02E65435EFFF5F8BB4 /* UIDatePicker+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FF819DD1A2E022DEA88EB636A5171A0 /* UIDatePicker+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 4ECC51EF925B553E44EEEBE710BEDA06 /* RxAtomic-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D7667BFBB1CA4146C32353BCC8E021D3 /* RxAtomic-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 4FBECA3A4FA46D1337EAECBED9597102 /* SubscriptionDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 367D089B43D44BC17209F56D584F2533 /* SubscriptionDisposable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 50FC264B95FF7B015774002F516946BD /* UINavigationController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17FFA634AB931F43C5C4CA70DCCDB69C /* UINavigationController+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 519A3A1A4FD99532BC141F9774677CCD /* NSTextStorage+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E39BB463E2178D09015AF8136F94837 /* NSTextStorage+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 526B33CCC8A35E0CF7323E237A00A4EB /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49AAE042196C822E6CD00DD3B18C9576 /* InfiniteSequence.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 548EE870E84E74FE33742E33083A2CA5 /* ObservableType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FA7CF91F58A22CAAC1F0C765DB2C118 /* ObservableType+Extensions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 54DBEBC3DC7595AEFFB71958F6666B0B /* UILongPressGestureRecognizer+RxGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DD2C53A862C7A3FA0A68423668A2BB5 /* UILongPressGestureRecognizer+RxGesture.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 54F0EC9103A20C4D5D529A3F5108EA83 /* Dematerialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD15C6F3526FFCD49067F3DE172A16EC /* Dematerialize.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 55817AE59ACD09B057FD410C580BA223 /* UISwipeGestureRecognizer+RxGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA2F6E03B57BC6D7A9B4BB41921E7032 /* UISwipeGestureRecognizer+RxGesture.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 55905CC622A0266CAC7C52CCA18EDFDE /* RxTableViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DC6357AFC6EA6B799E67005A9C00D0E /* RxTableViewDataSourceType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 569BF257E4EDD9DC17CB094034CA9FA3 /* ObservableConvertibleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6DA3809BBA08EB8097AD1371D1BB2CF /* ObservableConvertibleType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 571959FA71EA0F049CE2A57BBFDBC87B /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1827FA9C412D1FFD5550BACCD77F73EE /* Signal.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 573C9819F7EBDF18186E6B12EEB97C61 /* AdvertisementData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25C32EFFF8A7B3544FB89940DC21DD59 /* AdvertisementData.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 58AFB0EB2EBBE9217CBA5060AC4E9E14 /* Reactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F5BEC7B6958A186F358198528FAFD82 /* Reactive.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 5AA29CE4CD7AD2ED0FD54AC2271940BF /* UITabBarItem+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306263042738BD8075DE1755322EAF8 /* UITabBarItem+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 5D1E5ABA9874E1BC3360D918DAC843C0 /* String+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFA968C17E886ED9DCE795B9C2A2276E /* String+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 5ED5A259E4C1B317DA661BB2FF79A004 /* SwitchIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = D31B2DC43CF0FF5F4196EB2C9C5502A7 /* SwitchIfEmpty.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 5F2D207CA2C063027059FE1CF9D733EE /* TailRecursiveSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = DACAE89082C23C499CFA663FEB52F509 /* TailRecursiveSink.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 5FA6A7EF76087DC82555572C20BF66A8 /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86CEDA9F820A09DFA6646867EF296A51 /* Sink.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 604FCC0FB9905045E4FA99F1E621891A /* CBCentralManagerDelegateWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA144E50BDD55E4488C815D73FB6A995 /* CBCentralManagerDelegateWrapper.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 609F1140DDEB2078CBCC809DF597AD3F /* UINavigationItem+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A172EB47C1BDBC51DC474DA8E52427FA /* UINavigationItem+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 60AC14B5788F6246B77EF7B4F23ED72E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86696FBE14F6C1494012FB8D7C8B03E4 /* QuartzCore.framework */; };
+ 621A5D3AB1192ED4DE143A4F7AA3A225 /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = 957AFDC743D7601D3BF201181ED23074 /* Just.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 6251BEBC7AA2AF4DD2E3268DC1957024 /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81F561175E467E19DCDFF2CA8F9FC5B5 /* Map.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 634744D98BDD081DDBF3FF637536DA79 /* _RXDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 53756FEC4BEAFC89FF1FC11F383226E3 /* _RXDelegateProxy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 63B3B8C1AD4C517FA50997000FB9A3EA /* CharacteristicNotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 880EE4C4928FC651235FE2ABF683AA4A /* CharacteristicNotificationManager.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 63D346D095CC123BEF67C763C48261EE /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B8617EA3BA1B59A113C3D78196DA045 /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 655B3BD1B52CD8E20236A248EE546014 /* RxPickerViewDataSourceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7EDFBF35DAC438F74F8AF48F7568DAD /* RxPickerViewDataSourceProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 65CE65C20FF40D5795C4DAD1BD44D0DD /* UIRefreshControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B41013CF6F96F9CAB987AD3F7D3A083B /* UIRefreshControl+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 662C6BD811016FFE039C9E0A9276770A /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F9910716FC19C21F5B9F0027202A3A0 /* IQKeyboardManager.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 6767D1C8DE30640FF22AC9E06391F5BA /* Boxes.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2DFA5D0C908921875567B7BAAEFEA02 /* Boxes.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 67D6CA58B750B06FA646AED1AF7C7B97 /* SerialDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B1C1A9B6338B1049A2A386DC9F6BCA /* SerialDisposable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 69D67416C9268C2C518995548A99C71B /* SubscribeOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65C457A2256EE1E7B3667FB4FCB6BCA7 /* SubscribeOn.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 6A36F0327168B003E2571D3C8C240411 /* RxScrollViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7866787EBC32C34EA9BA638DCE389773 /* RxScrollViewDelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 6AF534BA9C6D58BA2CC2441D61057C6F /* TextInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76F2B49801CAF6C0A233BFA3664F32BB /* TextInput.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 6C6E959C76ADA3A27C0D7CD4BD930640 /* UIPageControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D795EF78F16CFABD75399FBB03E4135 /* UIPageControl+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 6E233B1F64CD70D33D9D366667C894E5 /* RxCocoaRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 11B6B6C03423BF9429853552BD82230B /* RxCocoaRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6EB988EB03A717A898FFE16F62E540F7 /* UIAlertAction+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 814C5DAA7C19F2097053C83477725324 /* UIAlertAction+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 6EE372ADCA37CFA540F95CA11505463F /* ScheduledDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDDDD2C281B659709776640FD0B5EF12 /* ScheduledDisposable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 6F9FA3649145A781AEA059CB7E0164D0 /* DelaySubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FA69D09158B88EABDFE69CA6F451813 /* DelaySubscription.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 709AE7AE62F7E067D11234BA7CA1450D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 858C516ABB973B0499FFB214AD5752A4 /* Foundation.framework */; };
+ 71461EDBDCE02EEF73B9BF0AF713628B /* NSTextView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6306881DF9BE12894E2C11B1993C710 /* NSTextView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 720BCE672BA94CA3DB49A6D3E8EA4859 /* TouchDownGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E06ACDE1A438F0568F6D3E22366277B /* TouchDownGestureRecognizer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 73D5ECE298BAE897F9A23C22F0A1ECCB /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D95AD23803360737CB20452AB4BD629E /* Bag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 74257744292348E8629A909A4F7D5AF6 /* ItemEvents.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34BDCA34539E1878B77215ED2967F1E /* ItemEvents.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 747B4DDAE8233BAB2D08007FF8291F3E /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A13D09127DF07C1925CC2BBCD3B32EE9 /* IQInvocation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 75B63C05544D8694700473363007E3F9 /* Timeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 187CD65537DF4900DF06E3816823EAEE /* Timeout.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 77B21B1E466882D06BC8315E70B70AA9 /* RxTableViewReactiveArrayDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD858891FAFACA72D2E68EF5751B6E2B /* RxTableViewReactiveArrayDataSource.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 78C5FF756128EE7DB44332D3270E9601 /* RxCollectionViewDataSourcePrefetchingProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FB4AB32C6CAC815BE66395ED388FABC /* RxCollectionViewDataSourcePrefetchingProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 793EE479874BA09B9A5263E726B265A0 /* UITabBarController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5011F9C2A9781800A606F273DCB4B1F /* UITabBarController+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 79B9BAB96C38BDC5AED02BA1FCFADCB5 /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF347A38EDAB1E27BB8510C0EA9903AD /* IQPreviousNextView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 79F93A9E8C3F9F9A35DED5E6AAAFA1D3 /* GestureFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01CA416D9D0B90859A6F2914C8C68428 /* GestureFactory.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 7AED77EC7C3D267FD672F186E3AF7985 /* Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F203BB898C3A07177B1C32A3F4439B6 /* Deprecated.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 7AFF74AB41372EC990CFDE3B9F7D62B3 /* SerialDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49BA752CAA59E5DD00F0545F1C69BFF7 /* SerialDispatchQueueScheduler.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 7B2693483E18219C247D9EFB394D2F4E /* Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = 251918517BAF255C9EDF28DC9A860686 /* Single.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 7C1D13E10C4B262E6C58DFE3B5EF90F2 /* ObservableConvertibleType+Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF73A7D8D8981A889F08C4E281B99F7F /* ObservableConvertibleType+Signal.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 7DB49E526B12F1267789B906D121C19D /* Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDAB7FD3F4304A4EE8140343BE32649D /* Empty.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 7F7CB85730605FF70AEB22C7DE21059E /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E53022E016BE2027BE7FE85ACA2EC85 /* Multicast.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 7F9436A3D8644E72B00A5052179AB240 /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFCE867CD834F62C0313FFC6B93B8A0F /* Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 7FC403AB0C5F0480619D9F317B1E5BE1 /* URLSession+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5952207BC72AE360BEF8B8722BDB23A7 /* URLSession+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8050673983D50B2A02411D354BDAD206 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02572F4CBADE68726A1A64AEF23D47A2 /* RxSwift.framework */; };
+ 8080ED10057840D693568F5CBBE7F9F3 /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4538A23CCBBDCDAAB346C428CDAF93F8 /* IQNSArray+Sort.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 80895ED5B3B6C0992398373FF820B7EA /* RxAtomic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D889790F2AC0028461CB309D20B71E57 /* RxAtomic.framework */; };
+ 80AAF36B16083078DD66DB71E0BA7346 /* NSObject+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 905F2337B3B7B66118DDF9010C8761BF /* NSObject+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 81025170C2BF031DCBE9C07A2B541F94 /* IpHelper.c in Sources */ = {isa = PBXBuildFile; fileRef = FD89A36011BEEB70BAEB423B28E45F9A /* IpHelper.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8189BF225DDF2ABFD6D96468439590DD /* ConcurrentMainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A33B7AD4F8A6F46C0ACC79BC6F29DFE /* ConcurrentMainScheduler.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8227B82188AB7C745489959AE6C45F63 /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08AB86FE8B1494ACB6354128FE3C9D99 /* IQUIViewController+Additions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 82E058C19CA278AB19769D4FAB99B215 /* UIRotationGestureRecognizer+RxGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5BAFE3F40F975A5A255B7CDEE8949D2 /* UIRotationGestureRecognizer+RxGesture.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 834130E2B24EDE0C14E1CD4D87CEEC94 /* CentralManagerRestoredState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD03FA54978673C3B05D7413C4BD66F /* CentralManagerRestoredState.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 83A6DDF53F73C53D8ABF88837CF9363F /* DelegateProxyType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB512CBE55A35D233C11B686443CBB8 /* DelegateProxyType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 84FFF327F0158064E0F44A0E29ABC50D /* NSObject+Rx+RawRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CEE64884A1C9813502E3245BB6F7280 /* NSObject+Rx+RawRepresentable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8536AAB77479ED3E9E768FDBCDF606C5 /* Peripheral+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCF307A83CA698D370C0D18139A10B3A /* Peripheral+Convenience.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8565110EC39908F1DD099DABF5734E92 /* IQKeyboardManager.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 84C4E32AE5B2F2E8EE8E759015C796F9 /* IQKeyboardManager.bundle */; };
+ 8712D681BA5B18AE69D85D8A20FE83BE /* CentralManager+RestoredState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73C08C1718015779B6EFEEE019C86BDE /* CentralManager+RestoredState.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 87B0ED1DD0B77BC2AB9A3B419D8AA091 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 858C516ABB973B0499FFB214AD5752A4 /* Foundation.framework */; };
+ 89778BD956B3B4E0902783DE5C4C19C1 /* RxCollectionViewDataSourceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66E140F8E31CB2F5A81087787E9232CE /* RxCollectionViewDataSourceProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8A622B60DAD426519EE1EB6F6F3B3AFB /* CombineLatest+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76CDCD9229B7ABF422A85FA4BA1D5B16 /* CombineLatest+Collection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8A8B56474705983C96E2C629328794F6 /* Signal+Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80A292C92176FC6ADA91D8759E15C711 /* Signal+Subscription.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8C24A7DE8505BED69DEB880F3A9E475A /* DispatchQueueConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0270E8F0578BAB2D06A0B976D67978FB /* DispatchQueueConfiguration.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8CDA09C7F0E56A2CF550253863D56DD0 /* UIView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1206BF7A8CC451BE52B15A219801EAC /* UIView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8DB38DBF52DAB2E95D8184D51B2C581F /* RxGesture-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D24133918741BE8C2288CB764B74411 /* RxGesture-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 8E7316D7F2D917865690BC2DB3F93765 /* Unimplemented.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41B6F8DBDC7759EEF10E6838211A39F6 /* Unimplemented.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8E7C3162A8B18E7B97B5F2479F7732B5 /* Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7521A2EAA1548A40E7F0D67831FA6B73 /* Driver.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8E90C1069C9A6D826A6FB51706738876 /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F80583FBBA39F2C5F9099E47ECBD317 /* IQUIScrollView+Additions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8F408DE1C68A31EDF3392A8D3B70F258 /* PublishRelay+Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D775C29DF9662D71601BDDFA73A9212 /* PublishRelay+Signal.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 8FC1F5B2186FB0B40332A8F8435D5D09 /* SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5937068E92FD5CAD445644D30149943D /* SharedSequence.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 917AD79F3893F3C3C629FF5FCD7B5FAC /* OperationQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68D9FB3F288ACCE759B3750F51067BA8 /* OperationQueueScheduler.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 91A084FC36BA73CA647D07F07731A34F /* UIControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A9D717D7469558E76ED9C07C3163DD4 /* UIControl+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 91F66FB4116EEF152D72BAB80D9C759B /* SchedulerServices+Emulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78F526AE3AAF4A980CB8AF9C61322754 /* SchedulerServices+Emulation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 92461D2EB91E3B605DFC8DECC956BF3D /* RxAtomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A52BE0B1E986ED0A31FD370AD2D5DC5C /* RxAtomic.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 9246AAB1BD4EC11F396CBDE6329836B8 /* UIProgressView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC059405EF092DFF3AE62CEAA1A03B3 /* UIProgressView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 9248880462FA5A59FDBC2D87942BC2BC /* HistoricalScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30E1D1535488E212C6DF2C78060306EB /* HistoricalScheduler.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 93922FCD99DECB3A028B1D56B1DE1358 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02572F4CBADE68726A1A64AEF23D47A2 /* RxSwift.framework */; };
+ 93EBA1E56FB88AC4C296244F8E3C6D42 /* BinaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F01FCEC4C22169803B08535DB77F901A /* BinaryDisposable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 94763656D9A96A5CE7403B9F2E48C82B /* PeripheralManagerRestoredState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D5CA29F6838D09153BEC8B11EC012F1 /* PeripheralManagerRestoredState.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 9595C385D63E7038D839838D75AB22C7 /* UISlider+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C5AD92E8B927C89AC44C37411BA67E7 /* UISlider+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 97716757BE738CA77C8F781109568096 /* DeprecationWarner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FC6A7AEE888CEEBBCEE84E438B78D64 /* DeprecationWarner.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 97A68F0AC5AD53B04B0D6BD490C23BF0 /* RxSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8E095B17D1E2711FACAEE453D40D63 /* RxSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 9813BDE467101CE7FDCBD7A3A4D3849F /* Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 217012E36E5CB14ED470F0A95FB33A9D /* Create.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 9856D26E4A1C31E2E2368B62DCBC9024 /* Binder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D310CB3AFE17DF12DE9694B5933F60F /* Binder.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 9966DD30D49CA505AB17A0AFB67CD3A2 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DE420E0426E18B7E9DEAF04BCE0FEFB /* Timer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 99BC3630BC0B46C5A328E935E40F98D7 /* CBCentral+Uuid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A3551BCD8D9260CAE6E55BC415B62E8 /* CBCentral+Uuid.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 9A1D908FEB2C88D798EEBD1783A8A756 /* UIImageView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C680B0C176181AEEB9A06A5D20E7DAAC /* UIImageView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 9AF0F348FCC57CC7F0EEBF5F60A47D61 /* CompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECFFB8C8CDE1CAB56AB5CFE0C7AEDA00 /* CompositeDisposable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 9BAD067CC3CD4A435DEAD163345EC82D /* UITextField+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 609000FAAD490CB39FA2AB7163219814 /* UITextField+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ 9F9BCF24AE218CB6E1DD860AE72426AC /* SynchronizedOnType.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABA65B661DEB122FAC6BF561186EA8A1 /* SynchronizedOnType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A083AF76DB2FFE52B65DE71A0EE777CC /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F60FD3B58514668813513B06DE9AD6 /* Merge.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A168A39EDA6AA23F27F97144A2FE6217 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EBAC1151F601A3FF5DD0981AEF5056 /* Filter.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A1881D9EA513A68C1F85F7C5E8631D06 /* RxTableViewDataSourceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F2ECB255574A12FF0412EB910E19A38 /* RxTableViewDataSourceProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A29F06ADC9433A4E41355492B3CA8A68 /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECC8A6CC7194EF25EA91F014281F74BE /* Window.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A401D429825C77FA1EB895CCE01734AD /* RxTextViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CF6F27EE82225A1167A0E99CF88FA3A /* RxTextViewDelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A5546C5CE5DC4A4B7B298A54B72B0BE9 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 242BD099103DB3068A95BAE5A23DB481 /* Error.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A58E714CB552B0A3BE79E13A0BC40EEB /* Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6B971283B22E4E7893A593877BA3DC /* Sequence.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A5E3D7DE3774E9910AB6288F72470896 /* ObservableType+PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92DB1F8D038B4C4C4A8172FB6CB5D055 /* ObservableType+PrimitiveSequence.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A603C9914283F6B285CDF0C6CCDAC1D7 /* BehaviorSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B3A10009541E89F34C09D0E81B81A2C /* BehaviorSubject.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A6CCBC1C7150EF98890CE8635352BA72 /* SchedulerType+SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = A27E3A7A150497075A0820AE333ACDAC /* SchedulerType+SharedSequence.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A717A778EEDEB8F284B360EF5083A67C /* AnonymousDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E661D26DF213362D84B35574DDF76114 /* AnonymousDisposable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A75B20ECBFBC6D2E9066828367828F81 /* RxCollectionViewReactiveArrayDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CA09970925B872E668C1590290F5522 /* RxCollectionViewReactiveArrayDataSource.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ A8D2738D9F62207A007481DBFAF8933D /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE78394691503F4BCDB83C17BDC358B /* IQKeyboardManagerSwift-dummy.m */; };
+ A8F928A7D1FE195B3C0880076D76046B /* SkipWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8FC1B06C08C5580D79178207E2F218B /* SkipWhile.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ AAA83A2421C4C6330CC9BD4498653048 /* RxCollectionViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1B6B6C24F1FACDD747B0588D419636C /* RxCollectionViewDelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ AB4E026F8D123D0F76E5DF4EADC77D98 /* UITextView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CC920E792BFE6ED6FB67ECF971C928 /* UITextView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ AC03F6BE5D9A1FA8B6EBEC92A9682E08 /* Scan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 184F403E22F0568ACA67749FF4893CB2 /* Scan.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ AC3E41A5762978A4B23548B645D47EBD /* VirtualTimeConverterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED103CD1BC80CC116368A2284D9CC49A /* VirtualTimeConverterType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ AC5691F440E8C844188241E617CFCB6B /* Characteristic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9A246424F47F9AD61658EE90B006D3 /* Characteristic.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ ACE0B20A0609ECF7D08C7A70F3722BDD /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF7A43647C1221FD549F18DA4444CBE6 /* RecursiveLock.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ AD1F66C42BB8DB92EBD24A7617F84EA0 /* Do.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29DCE28932528AB0510EEF884DDECFF5 /* Do.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ AE6B25716BD2A4CE7E9D8B6FF92C9C5C /* UIPanGestureRecognizer+RxGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0041BBFC8E75B932D1CE9A3C8A1CEBD /* UIPanGestureRecognizer+RxGesture.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ AF110992DCF5C51FCA5A8E2E84FD0F0C /* RxSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D5362F9F5F47CF5D7C5DA95E7A251D8 /* RxSwift-dummy.m */; };
+ AF36C96E279684445EECB64C65A3D9E5 /* _RX.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F9F2FB3479A5D76C2734021CB3230B /* _RX.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ AF462253F244E9FD87FE11B1949E8D5A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 858C516ABB973B0499FFB214AD5752A4 /* Foundation.framework */; };
+ AF5D89B11CF16050E2ED64E10353C53C /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA99B5C737EBCB3BDDF008A425B63199 /* IQUIView+Hierarchy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ AF8F88B5216FC7E87A1B4663DE4CA06B /* DisposeBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAA456880435D0044922B8CFB2AA70AC /* DisposeBase.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ B0ED92305C6E346785E60919D613DAEF /* TakeLast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D9EC8F13408A7E6BEB5C25AE397E90 /* TakeLast.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ B1FA654A1D9B1715F6CF9E29D2B1790C /* _RXKVOObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = FC4465D77BEDFC984E4C43E2E00A4D21 /* _RXKVOObserver.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B243368C38728530E7F22D2DE6A4A2B8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 858C516ABB973B0499FFB214AD5752A4 /* Foundation.framework */; };
+ B315AC2D650E425A8ED4EC5EEBB4377C /* RxSearchControllerDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2498B62FDD973C736F6279C81A1C70D /* RxSearchControllerDelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ B44A9C78093B45644FA8F69C33C819DD /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EFED2E02D57ECFCFF5D8DEA2DA2EF5D5 /* SwiftyJSON-dummy.m */; };
+ B46F1977C53E410C370E23010FB42B38 /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C65068701F03F8BE38F358BA1FE906 /* ObserverType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ B5AFF8FA1DB7E4B7DFE197004C15C459 /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80BBDBA85DDA2C81D31D57C5DF87BA36 /* SubjectType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ B5B9AFCF1C4B44C5C11522784A03FC12 /* NSObject+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5843D463902DF257912788EA69C900C0 /* NSObject+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ B67BF2DD80A9132B4A8DE1381C830DD4 /* RefCountDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5043CD07A22E913AF2CEBC114BCCB06E /* RefCountDisposable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ B697C7AD39F602AA5AFBDFCC97C22824 /* RxCocoa-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A7CAF03FD72C540D48AEC79539B02F77 /* RxCocoa-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B6A2035CE854E9344D4D3A21F2903489 /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE70BB7BF37A60C29B574467B38E740B /* InfiniteSequence.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ B80181A34359508A9A5ADC2B53B4AB43 /* RxTextStorageDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A73CD69BE99FCD1037C92E7AD8BD000 /* RxTextStorageDelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ B9C1A7C2970503383C79B6145289C562 /* PeripheralManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A02E5BFFD496248ED4F008823261B07 /* PeripheralManager.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ BA14F0C5670C70192E672EF1413ADED7 /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = F00DEC71267265AF1B3BDE386ACEE55E /* Platform.Darwin.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ BA2656E48077A6E2B12C48B29C80728E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 253E54328021927C042F6979829462E3 /* UIKit.framework */; };
+ BB921B3C938C6709338DEF910D7659CF /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B51CC05C00BCB12FBA50F8555C10ED /* Platform.Linux.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ BD4A4BF214DFA33089DD2C63D34884C3 /* TransformGestureRecognizers.swift in Sources */ = {isa = PBXBuildFile; fileRef = F28099F069362114ACE2296B4F4747DB /* TransformGestureRecognizers.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ BD5035AEEE9897C7E6950E3F9D4B9E7A /* ReplaySubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77F9877026E56E3E10D29ECA06D3BA2E /* ReplaySubject.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ BD565592CD59E09F99FE7BAE653025AE /* ElementAt.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8CDFE0793F4B1B963859D4DA52B038D /* ElementAt.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ BD754D84105C9578A084307F4D00502E /* Deferred.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3236FE1C63EB2B71E909AFD27CF3B130 /* Deferred.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ BDC9AB9E4E3C546514BD07A7EFDD1760 /* CBPeripheral+Uuid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5048A080CC5854F107513FE694700DFD /* CBPeripheral+Uuid.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ BDD878EA6E7E9ED9B431C0F3816406EA /* Cancelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11C3F617A456E342D44B1326C2ABB45F /* Cancelable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ BDDD42709C7A5E32A7C2685F317FD428 /* Completable+AndThen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5177999A7B9E9BA577C8D7EB28841454 /* Completable+AndThen.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ BF37452EA2F05D351F48D05498579780 /* UITapGestureRecognizer+RxGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C94DE5BAB5A5D5442029E8850ED1FAD /* UITapGestureRecognizer+RxGesture.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C0695DE795556CD629A2C38C8B115B91 /* View+RxGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = A60728E07FDFCDC57F9C9E6DABCFBEC1 /* View+RxGesture.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C1A778FAC022DA4186D9425A48B87133 /* Driver+Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755C5F193BDD4610BB14FB98FB57115C /* Driver+Subscription.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C1D4148587191239B107024356D123E9 /* CBPeripheralDelegateWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = E71EAE2C8B26FDC842C48A3A345DE01E /* CBPeripheralDelegateWrapper.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C200A6741457B6B3D583B08EB261D023 /* RetryWhen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85E525842CDA6C61C3D386B9B3F938F2 /* RetryWhen.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C2BFE481F7F1E16DC952C713FF62CF38 /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB4B33401887A0CEB6E06276AF5FDD2 /* Platform.Linux.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C2C1E2D8730211BD45FE33997A60A97F /* route.h in Headers */ = {isa = PBXBuildFile; fileRef = 77679AFA8FBC07DD5CC6278128CFCA24 /* route.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ C2C45C1F883068C5EE6BB66545FD5D75 /* BooleanDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B2A8E881DE73EF2641FB598225889E /* BooleanDisposable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C30BCACC134C2B6EF5C1BF2B999040D0 /* ForceTouchGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89EECAB640A1EDB2ADF8BE8397E346C5 /* ForceTouchGestureRecognizer.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C34ED4419525AEF5B247A1497C7CB531 /* DisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4B3711AB20F4E9B308E31335B268071 /* DisposeBag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C360F8D6529BFF39354DF8A46D4AC9D3 /* BluetoothError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A7216BAF7F45AFA4A899DD3AD407F5A /* BluetoothError.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C3A900604F488D41F518E3A8920E215D /* ControlProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 220FD6B72E7CB6A621E85F9B8B8F410B /* ControlProperty.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C40D95767D9AC3E8ECC63203AC72891F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 858C516ABB973B0499FFB214AD5752A4 /* Foundation.framework */; };
+ C4113DD0206058B24003F73F72D590B8 /* NSTextField+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8DF35A884B3B2D3B8D7CE22B4A92360 /* NSTextField+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C5DD236AEDDB84D51CE680FBD25D757B /* RxAtomic-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D6873856033E245883BC15EDABCF71EE /* RxAtomic-dummy.m */; };
+ C700706D552DDF4F8F6EA4B251D511E4 /* RxGestureRecognizerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E2FD19443B869EFB77BF7F7D8EA8063 /* RxGestureRecognizerDelegate.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C7D420B12C641E27242C77F4883C8AD3 /* Never.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D3033FDDE76C960260FBE5BC83E7600 /* Never.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C7E220C8EF918BE718DA6725A668A7CC /* RxPickerViewAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 678921C6D44A33423492FC857F829302 /* RxPickerViewAdapter.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C895373090AC3038F381A8DCB7D8FD01 /* Connector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A8855F2AA2967ED52C523BC70590295 /* Connector.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ C979A62493736C2A8395F2A774415512 /* UUIDIdentifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5B61E2FF86E0AD1FF6649A9586F7ADB /* UUIDIdentifiable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ CA98AB06D1D73779F78110B159DA76B3 /* BluetoothState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBF740D055A7F1F868001D1EFB78DAD8 /* BluetoothState.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ CB0C0D722730B17146FF7ACFC263D9CD /* Peripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A04EBF5CAC1D6D68878E8A8468AE9D /* Peripheral.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ CB13248214C05C54CDCD44CAF1A10349 /* NotificationCenter+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5368974969F66FC538B51ED227F451B2 /* NotificationCenter+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ CB800CEAD90B8A205CA4B1EDEAC9CB1C /* _RX.m in Sources */ = {isa = PBXBuildFile; fileRef = 85ADBE8E86F8D95963BD093C79A75154 /* _RX.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ CC094236C466E37AD99C9A0CCC8383B1 /* UIPickerView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F84984E438272787F0CBB31C8A561E4 /* UIPickerView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ CCA4BC324EC57E33DA62F4E5957A4952 /* HasDisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 715DFA925B882D2608B87EF085702DEE /* HasDisposeBag.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ CD0E93DAAD486861EA2D21F860B5C8D7 /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C61A1CD19B03362E3F142D191238FEB /* ObservableType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ CD38256CB1F6B77DEF23DCE4700D3A12 /* RxCocoa-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7244681C3E3C7ACD127FC9721BF82ABE /* RxCocoa-dummy.m */; };
+ CDA00862D9586B83063E23817124C004 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 858C516ABB973B0499FFB214AD5752A4 /* Foundation.framework */; };
+ CE79966454364DDC2BF834A1C6C130BA /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E1D0D79A2933C9282FA725E0ECAC3D3 /* Logging.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ CE9EBFF7F97F746BEC19D1601D20C878 /* _RXObjCRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = C5866F984999F7A9EE894E0AA80D6AC0 /* _RXObjCRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ CEBC160B92D1F8C7ABF953C90E0FD88B /* NSControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1233729B75F488B81A9761744C9DAE3B /* NSControl+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ CF46166E84709FB154D69879B0F9F0CE /* Repeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55A097970BF5730071C3847181D3310 /* Repeat.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ CF509149175D265133C8392B3FB8E579 /* RxAtomic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D889790F2AC0028461CB309D20B71E57 /* RxAtomic.framework */; };
+ D000D6D7DB278A3670FB3BD94089B1C2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 858C516ABB973B0499FFB214AD5752A4 /* Foundation.framework */; };
+ D1224E8C4440E90D36CFCF99C19E1AC8 /* UIApplication+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850F022FFE85A14DCFB57694B0D3D0F4 /* UIApplication+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ D2A0E2FEFA955F4DB23D183CBB8E3007 /* HistoricalSchedulerTimeConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C75E96A22696C817CEFD816EA036E5C /* HistoricalSchedulerTimeConverter.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ D344097B4FABD0406830E9413356CD60 /* RxBluetoothKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 371F5666459B800A3B939D48ABB3F799 /* RxBluetoothKit-dummy.m */; };
+ D38D31F19536A7F52649F389DB1901A3 /* RxPickerViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46D4D6ED8B17AFCEE2724C6B0AD9A2BB /* RxPickerViewDelegateProxy.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ D3D193F090AB33FD6B23D4AA94DD8F70 /* Concat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 103ECE214ABA6B11775F52BF22037F43 /* Concat.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ D57EBF218A587B277DD81C4A75EDC656 /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E4705D55F7D14134D9E62AE3E43A842 /* IQUITextFieldView+Additions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ D5A57C2D74C5CFE12F6886191C55B73E /* ObservableConvertibleType+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCEBE433BD56C48801958CCA461A9C46 /* ObservableConvertibleType+Driver.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ D6369B5366C726112432643EF1D25778 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A97A795B5F91BBEAFA822E77A6296E0 /* CoreBluetooth.framework */; };
+ D66333C0EDC144ECE9713D75D63B0867 /* UISegmentedControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B69B31EC1BBD96F084508CC265123D /* UISegmentedControl+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ D87DFA2C3BBFFBA68D52F32B5E89653B /* CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F801BD12A8BF3B18A690C7FAA75EBF01 /* CombineLatest.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ D89B409A98E6C956B0F6FEAE1D854706 /* KeyPathBinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD3F943616A5D3AD960076822BE205D /* KeyPathBinder.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ D8E727408D38D018653B0B082A7BB2CD /* UISearchBar+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83B69DD7C8CF563FE387C29E31879AE0 /* UISearchBar+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ DB1DFD55BB3B9267B04BBAAB8AF17829 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 858C516ABB973B0499FFB214AD5752A4 /* Foundation.framework */; };
+ DB3611791D0FD51CC4C40D57718D7E32 /* UIScrollView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FCCAB59D3DA28AC62FC448662A070FA /* UIScrollView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ DBCF21EAF54A592359BF7051C42A5D68 /* WithLatestFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 814147E06F0CFE9E8F114699140D7F19 /* WithLatestFrom.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ DC79F49849B89194618EE4554F804469 /* RxAtomic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D889790F2AC0028461CB309D20B71E57 /* RxAtomic.framework */; };
+ DE065C3F477CEBF3013301B433741861 /* Pods-iOSClientApp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C0A939F07B48CC3DEF7C297194A6FA81 /* Pods-iOSClientApp-dummy.m */; };
+ DE7832356F1C2D7F27A60F14360C11CC /* SynchronizedDisposeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1942C88401BB572FA8DBFF131414849 /* SynchronizedDisposeType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ DE99D2C0C4B2E8478B1A8D71EC7E54CB /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 292100A7BAA152DF8E249CD93B35CC3E /* DispatchQueue+Extensions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ DEA8093C9B2DF18B856776377810D166 /* ObserverBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2D5BB9B58B2E5424105F9796CAEC61 /* ObserverBase.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ DEAFA0FE967FD7A2FB4D1432D4789B6E /* PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = B233E434D5E7788372ED5EAC484642B5 /* PrimitiveSequence.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ DEE9194FF2F695079D9166CD689D6A91 /* ControlTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 209584CA3681169D188BBEC50819AEFA /* ControlTarget.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ DEFED679AFFFA7BFA2CA9ADDC8B1E0A0 /* NSImageView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDE72F6A860EDB232361080D6ADF6D9B /* NSImageView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ E08A4385EA2AC41FCD2AD1DD4AF2BD24 /* Bag+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FF24A293DE327009B467113950EB133 /* Bag+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ E0A8A27C67310C9100FAF5DCC0808498 /* ShareReplayScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39C0BCC6506CAAEC9E29F95B43187AB7 /* ShareReplayScope.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ E1F42DE408BF60D67BA41D3E5811CD61 /* KVORepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97F073EB792A58AB38C6B7D73BE9B819 /* KVORepresentable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ E36CA2C24AF8714F00EF2DBB4CC930C6 /* NSObject+Rx-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 72CD96BC600596111ABFED0CB33CDE71 /* NSObject+Rx-dummy.m */; };
+ E380BEF8DF364C5FC91D3ABED5CB460E /* KVORepresentable+Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3914001CECB349E744F4CBAA8D76E504 /* KVORepresentable+Swift.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ E422754DEB5341EFB54F52EF82228939 /* TakeUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = A16AFC4DB058DB32EBC1D3397B27A6DA /* TakeUntil.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ E648111FA1807F4FD0FA1B1AD91507F6 /* AsyncLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = C396F66E0F2268FA985FE277037879AE /* AsyncLock.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ E67D0ADC643042ED3EDCAD0D71B14493 /* DeprecationWarner.swift in Sources */ = {isa = PBXBuildFile; fileRef = BACB22790B1663DD07984602169F9879 /* DeprecationWarner.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ E790B55740886A4BE65D68A4945BE003 /* Switch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33DD30F5F83E2B8407F44027DF83DBF9 /* Switch.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ E9FAB40C84BCA25E93EC692D5372B00F /* ScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 176732FAA4096865001922D9C465CF12 /* ScheduledItem.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ EB60CE7F526B7F2FC63F96F5F6BEAA42 /* TakeWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71590661F98277F12F9A2F3B20FA8300 /* TakeWhile.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ EBD7BA7A59047406F0F910F1AE23D6B5 /* Materialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = A587B1C095DD983387E815AC447B318C /* Materialize.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ EC28FA11C63CADE18B39E2263A6B2442 /* PublishRelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA23EED91C2B2BB8B38AC3BA5F5F1CEC /* PublishRelay.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ EE0DF612B463569C39EEF1488C846B7D /* SharedTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FCEC22EE4EBBE04E459FB0FB9FD63E8 /* SharedTypes.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ EE1BB1C154EDF310AFFF423710B06DE1 /* RxCollectionViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1386F7D786AE93D00B11DCD9770C7D60 /* RxCollectionViewDataSourceType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ EF0F3EECAC95DB40DE8C0E5FA56AF13D /* ManagerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ED1631BEB20F919BB90EEB2129B2C25 /* ManagerType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ EF11BBA1EEBE8C896009FB6E7F575A93 /* Using.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E95DCF2729C5E5E6DCE0D6467A291DE /* Using.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ EF4691312F37B97EED241AE3A87F3394 /* VirtualTimeScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = E204CB7FA7DF59AADB11F733E8BE035F /* VirtualTimeScheduler.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ EFABF9FC01572691C36005BA501DAEFD /* Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F4072FECA5075E7E25140D3B7E2C5C /* Delay.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ EFBCFFD5B6F21123676781161D03CB98 /* KVORepresentable+CoreGraphics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B47AA757F5EC55EC59E4B8DAF90524E /* KVORepresentable+CoreGraphics.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F04799AA3117998F9D256C856B4181A4 /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = A235E642E41EED70BD157634BEE7A8F0 /* RecursiveLock.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F0F07CCE8B31D36352826D7586989DAF /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61927D9D067FF80F605FB94755049618 /* IQKeyboardReturnKeyHandler.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F20FEAF59DAF9EE88FD8996253691474 /* Debounce.swift in Sources */ = {isa = PBXBuildFile; fileRef = 180EC2F1AA42FEAC0F0BA3A24CB0DE3A /* Debounce.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F2E63782039EA2EC1A2D0C3960AE1153 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = A724C2C9E83B859AB888A77ED82DFA6D /* Throttle.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F38098853FDF4360D28E66566669A844 /* NSObject+Rx+KVORepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFBA77B2E0E8496305AC1AF1ED6CC75A /* NSObject+Rx+KVORepresentable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F3A10FA2CEE604D9E66D0D6724966954 /* RxAtomic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D889790F2AC0028461CB309D20B71E57 /* RxAtomic.framework */; };
+ F3E2240822F744A6B7440CBB97C3D0C1 /* SectionedViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1955C22CAC005C3D1010D8612A297F16 /* SectionedViewDataSourceType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F4496E4B37ED3E8E75D1DEB862AC6BD8 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02572F4CBADE68726A1A64AEF23D47A2 /* RxSwift.framework */; };
+ F47BC00E7F943C266673B16FD894E570 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C755553B0C83C251887A9C07A00AF4D /* Logging.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F52FCBB3F459AEAF41CC287C9582B3D3 /* NSObject+Rx-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D4779914338ADB4FE74BAD5385707271 /* NSObject+Rx-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F54A26B20619D61295259CBE2FEC1A45 /* Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9985E1BA0BDD28A89EDF07D321E74EDE /* Reduce.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F66287625A29722E57397AFEEC8E6080 /* AsMaybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7896EA3424D8479E898EA3F3C7830E9 /* AsMaybe.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F6DA1EA682872B29B2CB32E1EEB5B2DB /* Observable+Bind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA284E4B4415AA9BFD2299109893034 /* Observable+Bind.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F6FCEFC02AECF19493F0337FE6601B69 /* Disposables.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF1ED1709BA2C12F0153774F7BB50E0E /* Disposables.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F7A960B88C70FC80EAC484066A49B48B /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8865DB8AB4BAB33CF206265EC947888B /* IQTextView.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F80B2F7FED02D702D9923D0E41A0D402 /* DefaultIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 690026D6D460C25EC167FC99A2F456BC /* DefaultIfEmpty.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F80DE78E294F88611001682828286969 /* BehaviorRelay+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C6CAC8D814FA8C5FC90329E13973DDB /* BehaviorRelay+Driver.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F84A121D3FB9D7F6C463512B72055A61 /* SynchronizedUnsubscribeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7111E63A2CC133B6C55B827A60B21095 /* SynchronizedUnsubscribeType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ F9A27CECF95AB7E95D44EF96BC254B8C /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCB78705456F8BFD865C11FBD5A55012 /* IQKeyboardManagerConstants.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ FA9BFEB3D3F490086D48BF7D4A25986C /* SingleAssignmentDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBAA1E9367A2EFDBF02292C1F536FB07 /* SingleAssignmentDisposable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ FAC7232E3084B04B4F6FFB906773DE7C /* RecursiveScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B016EA9015DD407C256BCA9179A519B2 /* RecursiveScheduler.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ FC527527C7B5B10AEB104BF517AA17CD /* ImmediateSchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8D3E0DE3B627E0771C12021FC7A15B2 /* ImmediateSchedulerType.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ FDF3028555F2514DF49435775C9ECD83 /* UIActivityIndicatorView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95E3A23AF669A1AA129689A29FAB0A33 /* UIActivityIndicatorView+Rx.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ FE755D92156E662DA2D3D3B6C93113E8 /* Maybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4B0B1F682160B665CBA3F041C99A481 /* Maybe.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+ FFE77C3FDD7A1E195A9FEDF0EB5508DE /* GestureRecognizer+RxGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58E2F30C45A82E9823067A33E2663A16 /* GestureRecognizer+RxGesture.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 11EF5519932D5D4E657C24F520892823 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 333932603688CB96830DFC988271673C;
+ remoteInfo = RxGesture;
+ };
+ 236C22F46ADC88B6F670C28F8046860F /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 4C9B6A2C253950446DACCE19B96F7719;
+ remoteInfo = RxSwift;
+ };
+ 2E043396047F1CA52BB1BA1A6CCEC292 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 11DFAA27FEAD06CBBDEB745A76DE494C;
+ remoteInfo = RxAtomic;
+ };
+ 415A178BB58CC286CDDC9B533556B6D8 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 1E9DF3A4E734D001B3B55D41115C25E3;
+ remoteInfo = RxCocoa;
+ };
+ 52C8133595CD110DBFA9854C89EF2D68 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 4C9B6A2C253950446DACCE19B96F7719;
+ remoteInfo = RxSwift;
+ };
+ 64FD627464898FF1CE9685BFC1DFAA96 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 11DFAA27FEAD06CBBDEB745A76DE494C;
+ remoteInfo = RxAtomic;
+ };
+ 6521F2EC6799DE416C8A4C8C0837DD4E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 3F7E799347425B307163DD07FEE7236D;
+ remoteInfo = FGRoute;
+ };
+ 69287ABB5FAA01BC67B126FAE3B80C91 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 11DFAA27FEAD06CBBDEB745A76DE494C;
+ remoteInfo = RxAtomic;
+ };
+ 695C8D116ECD5911FBB733E9896E599F /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 7CB4A828CDBC1D14B7066E55B64DD19E;
+ remoteInfo = SwiftyJSON;
+ };
+ 753A24D1DDBCFAD8732B6C73DD01ACD0 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 4C9B6A2C253950446DACCE19B96F7719;
+ remoteInfo = RxSwift;
+ };
+ 79E3037866BAB2A3D97D24D6EDEEC197 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 593CC05CF77C1DAADF76EE213BF6594A;
+ remoteInfo = "NSObject+Rx";
+ };
+ 7FA0B5F40593043212EA5BF9418C6486 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 11DFAA27FEAD06CBBDEB745A76DE494C;
+ remoteInfo = RxAtomic;
+ };
+ 99BDF3DB3A450831E619707FF8F52470 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 11DFAA27FEAD06CBBDEB745A76DE494C;
+ remoteInfo = RxAtomic;
+ };
+ 9B65872046061DE873E2367CC47A9D87 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 4C9B6A2C253950446DACCE19B96F7719;
+ remoteInfo = RxSwift;
+ };
+ B5DFB0CD1EBAB335252B4D70AE59F21B /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 1E9DF3A4E734D001B3B55D41115C25E3;
+ remoteInfo = RxCocoa;
+ };
+ CF9D939AE3F09CDD8D363B4D1082945A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 4C9B6A2C253950446DACCE19B96F7719;
+ remoteInfo = RxSwift;
+ };
+ D538D5CD92BBAC1C226DF1B92538DE8C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B56138362A2A6369497DE0B3731931E9;
+ remoteInfo = RxBluetoothKit;
+ };
+ DFDD759BDB3569EADE2C05EBEA31EF18 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = C7A242603ED7333794F270586FA2B22D;
+ remoteInfo = IQKeyboardManagerSwift;
+ };
+ FBB5BCA15C90A638FEC3C6C0FCC1EF4A /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 11DFAA27FEAD06CBBDEB745A76DE494C;
+ remoteInfo = RxAtomic;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 01CA416D9D0B90859A6F2914C8C68428 /* GestureFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GestureFactory.swift; path = Pod/Classes/GestureFactory.swift; sourceTree = ""; };
+ 02572F4CBADE68726A1A64AEF23D47A2 /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 0270E8F0578BAB2D06A0B976D67978FB /* DispatchQueueConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DispatchQueueConfiguration.swift; path = RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift; sourceTree = ""; };
+ 04F83B9B75F4AF1821E1A1BF4232C0EA /* RxCocoa-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxCocoa-prefix.pch"; sourceTree = ""; };
+ 071EB136E4DBDB75AEFD71D01EFF5665 /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; };
+ 08AB86FE8B1494ACB6354128FE3C9D99 /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIViewController+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift"; sourceTree = ""; };
+ 0A02E5BFFD496248ED4F008823261B07 /* PeripheralManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PeripheralManager.swift; path = Source/PeripheralManager.swift; sourceTree = ""; };
+ 0B3A10009541E89F34C09D0E81B81A2C /* BehaviorSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BehaviorSubject.swift; path = RxSwift/Subjects/BehaviorSubject.swift; sourceTree = ""; };
+ 0B8617EA3BA1B59A113C3D78196DA045 /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = ""; };
+ 0BBACBA5C80D8AECCE70B9A5D6EB48C9 /* Pods-iOSClientApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iOSClientApp.debug.xcconfig"; sourceTree = ""; };
+ 0C5AD92E8B927C89AC44C37411BA67E7 /* UISlider+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISlider+Rx.swift"; path = "RxCocoa/iOS/UISlider+Rx.swift"; sourceTree = ""; };
+ 0C61A1CD19B03362E3F142D191238FEB /* ObservableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableType.swift; path = RxSwift/ObservableType.swift; sourceTree = ""; };
+ 0C755553B0C83C251887A9C07A00AF4D /* Logging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Logging.swift; path = RxCocoa/Foundation/Logging.swift; sourceTree = ""; };
+ 0C75E96A22696C817CEFD816EA036E5C /* HistoricalSchedulerTimeConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HistoricalSchedulerTimeConverter.swift; path = RxSwift/Schedulers/HistoricalSchedulerTimeConverter.swift; sourceTree = ""; };
+ 0CA284E4B4415AA9BFD2299109893034 /* Observable+Bind.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Bind.swift"; path = "RxCocoa/Common/Observable+Bind.swift"; sourceTree = ""; };
+ 0D795EF78F16CFABD75399FBB03E4135 /* UIPageControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIPageControl+Rx.swift"; path = "RxCocoa/iOS/UIPageControl+Rx.swift"; sourceTree = ""; };
+ 0E06ACDE1A438F0568F6D3E22366277B /* TouchDownGestureRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TouchDownGestureRecognizer.swift; path = Pod/Classes/iOS/TouchDownGestureRecognizer.swift; sourceTree = ""; };
+ 0E53022E016BE2027BE7FE85ACA2EC85 /* Multicast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Multicast.swift; path = RxSwift/Observables/Multicast.swift; sourceTree = ""; };
+ 0EE7BB5717836BE97B371C59CA19C719 /* RxBluetoothKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxBluetoothKit-prefix.pch"; sourceTree = ""; };
+ 0F203BB898C3A07177B1C32A3F4439B6 /* Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deprecated.swift; path = RxCocoa/Deprecated.swift; sourceTree = ""; };
+ 0F5BEC7B6958A186F358198528FAFD82 /* Reactive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reactive.swift; path = RxSwift/Reactive.swift; sourceTree = ""; };
+ 0FCCAB59D3DA28AC62FC448662A070FA /* UIScrollView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+Rx.swift"; path = "RxCocoa/iOS/UIScrollView+Rx.swift"; sourceTree = ""; };
+ 103ECE214ABA6B11775F52BF22037F43 /* Concat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concat.swift; path = RxSwift/Observables/Concat.swift; sourceTree = ""; };
+ 11B6B6C03423BF9429853552BD82230B /* RxCocoaRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RxCocoaRuntime.h; path = RxCocoa/Runtime/include/RxCocoaRuntime.h; sourceTree = ""; };
+ 11C3F617A456E342D44B1326C2ABB45F /* Cancelable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cancelable.swift; path = RxSwift/Cancelable.swift; sourceTree = ""; };
+ 1206C9D236C988E9B337AAB34C16FCBD /* ToArray.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToArray.swift; path = RxSwift/Observables/ToArray.swift; sourceTree = ""; };
+ 1233729B75F488B81A9761744C9DAE3B /* NSControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSControl+Rx.swift"; path = "RxCocoa/macOS/NSControl+Rx.swift"; sourceTree = ""; };
+ 1386F7D786AE93D00B11DCD9770C7D60 /* RxCollectionViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxCollectionViewDataSourceType.swift; sourceTree = ""; };
+ 14F31B35D071A8D07F52A7A8EC2AF4C1 /* Optional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Optional.swift; path = RxSwift/Observables/Optional.swift; sourceTree = ""; };
+ 176732FAA4096865001922D9C465CF12 /* ScheduledItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledItem.swift; path = RxSwift/Schedulers/Internal/ScheduledItem.swift; sourceTree = ""; };
+ 17FFA634AB931F43C5C4CA70DCCDB69C /* UINavigationController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UINavigationController+Rx.swift"; path = "RxCocoa/iOS/UINavigationController+Rx.swift"; sourceTree = ""; };
+ 180EC2F1AA42FEAC0F0BA3A24CB0DE3A /* Debounce.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debounce.swift; path = RxSwift/Observables/Debounce.swift; sourceTree = ""; };
+ 1827FA9C412D1FFD5550BACCD77F73EE /* Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Signal.swift; path = RxCocoa/Traits/Signal/Signal.swift; sourceTree = ""; };
+ 184F403E22F0568ACA67749FF4893CB2 /* Scan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Scan.swift; path = RxSwift/Observables/Scan.swift; sourceTree = ""; };
+ 187CD65537DF4900DF06E3816823EAEE /* Timeout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeout.swift; path = RxSwift/Observables/Timeout.swift; sourceTree = ""; };
+ 1955C22CAC005C3D1010D8612A297F16 /* SectionedViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SectionedViewDataSourceType.swift; path = RxCocoa/Common/SectionedViewDataSourceType.swift; sourceTree = ""; };
+ 1A3551BCD8D9260CAE6E55BC415B62E8 /* CBCentral+Uuid.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CBCentral+Uuid.swift"; path = "Source/CBCentral+Uuid.swift"; sourceTree = ""; };
+ 1B338CF3C0137F63AD47C8FE8237F88F /* FGRoute.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FGRoute.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1CDF4038CF743A6986711786D58488BC /* Disposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposable.swift; path = RxSwift/Disposable.swift; sourceTree = ""; };
+ 1D3033FDDE76C960260FBE5BC83E7600 /* Never.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Never.swift; path = RxSwift/Observables/Never.swift; sourceTree = ""; };
+ 1D310CB3AFE17DF12DE9694B5933F60F /* Binder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Binder.swift; path = RxCocoa/Common/Binder.swift; sourceTree = ""; };
+ 1D35E26838EF30548BB03AEE0D33D3D6 /* NSObject_Rx.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NSObject_Rx.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1DC5359CDF37DF83629AA0BA24DA39DF /* ConcurrentDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConcurrentDispatchQueueScheduler.swift; path = RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift; sourceTree = ""; };
+ 1DD3C8A87038B3DB89506AB9496A396E /* InvocableScheduledItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InvocableScheduledItem.swift; path = RxSwift/Schedulers/Internal/InvocableScheduledItem.swift; sourceTree = ""; };
+ 1E39BB463E2178D09015AF8136F94837 /* NSTextStorage+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextStorage+Rx.swift"; path = "RxCocoa/iOS/NSTextStorage+Rx.swift"; sourceTree = ""; };
+ 1E5A7F1EBFAB403403F7D1B9229E0E8A /* IQKeyboardManagerSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IQKeyboardManagerSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1E7C5189810531F2183204C2C9B98231 /* Bag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bag.swift; path = Platform/DataStructures/Bag.swift; sourceTree = ""; };
+ 1F9CDA2DB9C51C71D27049A45039603B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 1FA5BAA8FC03C1F7AE3F3368BA1A9DC6 /* Lock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Lock.swift; path = RxSwift/Concurrency/Lock.swift; sourceTree = ""; };
+ 1FC059405EF092DFF3AE62CEAA1A03B3 /* UIProgressView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIProgressView+Rx.swift"; path = "RxCocoa/iOS/UIProgressView+Rx.swift"; sourceTree = ""; };
+ 209584CA3681169D188BBEC50819AEFA /* ControlTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlTarget.swift; path = RxCocoa/Common/ControlTarget.swift; sourceTree = ""; };
+ 20ADEC86D1DCEFAD018A1E0DCA7BE19A /* UICollectionView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UICollectionView+Rx.swift"; path = "RxCocoa/iOS/UICollectionView+Rx.swift"; sourceTree = ""; };
+ 217012E36E5CB14ED470F0A95FB33A9D /* Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Create.swift; path = RxSwift/Observables/Create.swift; sourceTree = ""; };
+ 220FD6B72E7CB6A621E85F9B8B8F410B /* ControlProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlProperty.swift; path = RxCocoa/Traits/ControlProperty.swift; sourceTree = ""; };
+ 2299364694332CB88FF23F31C0DC73FF /* RxTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTarget.swift; path = RxCocoa/Common/RxTarget.swift; sourceTree = ""; };
+ 23AAFB57F862D21568EF2849CAFD934E /* Pods-iOSClientApp-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-iOSClientApp-acknowledgements.markdown"; sourceTree = ""; };
+ 242BD099103DB3068A95BAE5A23DB481 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RxSwift/Observables/Error.swift; sourceTree = ""; };
+ 24F52A5C582B74766E6022A931472B68 /* Service.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Service.swift; path = Source/Service.swift; sourceTree = ""; };
+ 251918517BAF255C9EDF28DC9A860686 /* Single.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Single.swift; path = RxSwift/Traits/Single.swift; sourceTree = ""; };
+ 253E54328021927C042F6979829462E3 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
+ 253FDD55B614B1CC1DC125552F91695D /* StartWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StartWith.swift; path = RxSwift/Observables/StartWith.swift; sourceTree = ""; };
+ 25BB1CA1017E41E431BB1325471E2B7D /* RxBluetoothKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxBluetoothKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 25C32EFFF8A7B3544FB89940DC21DD59 /* AdvertisementData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdvertisementData.swift; path = Source/AdvertisementData.swift; sourceTree = ""; };
+ 25C917541BFD5C5897F72E17CBA4AB32 /* RxNavigationControllerDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxNavigationControllerDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxNavigationControllerDelegateProxy.swift; sourceTree = ""; };
+ 25CB599A9BCF4420A9E0C265123F84E6 /* NSView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSView+Rx.swift"; path = "RxCocoa/macOS/NSView+Rx.swift"; sourceTree = ""; };
+ 25E4747909033B7D3890F6D924E9C69E /* AtomicInt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AtomicInt.swift; path = Platform/AtomicInt.swift; sourceTree = ""; };
+ 26B5C9E92F253D6E6AD0154D9723C881 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 276791F710E57D86D59412B5CA85B027 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 292100A7BAA152DF8E249CD93B35CC3E /* DispatchQueue+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Extensions.swift"; path = "Platform/DispatchQueue+Extensions.swift"; sourceTree = ""; };
+ 29BCDD1861343F8F3A7DAAF4949445F2 /* LockOwnerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LockOwnerType.swift; path = RxSwift/Concurrency/LockOwnerType.swift; sourceTree = ""; };
+ 29C65068701F03F8BE38F358BA1FE906 /* ObserverType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserverType.swift; path = RxSwift/ObserverType.swift; sourceTree = ""; };
+ 29DCE28932528AB0510EEF884DDECFF5 /* Do.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Do.swift; path = RxSwift/Observables/Do.swift; sourceTree = ""; };
+ 2A9D717D7469558E76ED9C07C3163DD4 /* UIControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIControl+Rx.swift"; path = "RxCocoa/iOS/UIControl+Rx.swift"; sourceTree = ""; };
+ 2CEE64884A1C9813502E3245BB6F7280 /* NSObject+Rx+RawRepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Rx+RawRepresentable.swift"; path = "RxCocoa/Foundation/NSObject+Rx+RawRepresentable.swift"; sourceTree = ""; };
+ 2D24133918741BE8C2288CB764B74411 /* RxGesture-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxGesture-umbrella.h"; sourceTree = ""; };
+ 2D72D470BCFBF6109C950C66871BB178 /* UIViewController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewController+Rx.swift"; path = "RxCocoa/iOS/UIViewController+Rx.swift"; sourceTree = ""; };
+ 2E1D0D79A2933C9282FA725E0ECAC3D3 /* Logging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Logging.swift; path = Source/Logging.swift; sourceTree = ""; };
+ 2FF24A293DE327009B467113950EB133 /* Bag+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bag+Rx.swift"; path = "RxSwift/Extensions/Bag+Rx.swift"; sourceTree = ""; };
+ 309FB1627065C2A97C1DA041BEE00A82 /* ControlEvent+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ControlEvent+Driver.swift"; path = "RxCocoa/Traits/Driver/ControlEvent+Driver.swift"; sourceTree = ""; };
+ 30E1D1535488E212C6DF2C78060306EB /* HistoricalScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HistoricalScheduler.swift; path = RxSwift/Schedulers/HistoricalScheduler.swift; sourceTree = ""; };
+ 31793EEACE4698546D19AA33AF304CCF /* FGRoute-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FGRoute-prefix.pch"; sourceTree = ""; };
+ 3236FE1C63EB2B71E909AFD27CF3B130 /* Deferred.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deferred.swift; path = RxSwift/Observables/Deferred.swift; sourceTree = ""; };
+ 32B1C1A9B6338B1049A2A386DC9F6BCA /* SerialDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDisposable.swift; path = RxSwift/Disposables/SerialDisposable.swift; sourceTree = ""; };
+ 3387297891B420A335CBAE02C13515C5 /* RxAtomic.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxAtomic.modulemap; sourceTree = ""; };
+ 33DD30F5F83E2B8407F44027DF83DBF9 /* Switch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Switch.swift; path = RxSwift/Observables/Switch.swift; sourceTree = ""; };
+ 35F962AF01252B3285DDC2C8B985EFCB /* MainScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MainScheduler.swift; path = RxSwift/Schedulers/MainScheduler.swift; sourceTree = ""; };
+ 3629FBC016D6090491B5A9C9A86E03AB /* Catch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Catch.swift; path = RxSwift/Observables/Catch.swift; sourceTree = ""; };
+ 367D089B43D44BC17209F56D584F2533 /* SubscriptionDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscriptionDisposable.swift; path = RxSwift/Disposables/SubscriptionDisposable.swift; sourceTree = ""; };
+ 371F5666459B800A3B939D48ABB3F799 /* RxBluetoothKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxBluetoothKit-dummy.m"; sourceTree = ""; };
+ 37B69B31EC1BBD96F084508CC265123D /* UISegmentedControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISegmentedControl+Rx.swift"; path = "RxCocoa/iOS/UISegmentedControl+Rx.swift"; sourceTree = ""; };
+ 37E4D46320A6E7318D4009922AFA99FC /* FGRoute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FGRoute.h; path = FGRoute/Classes/FGRoute.h; sourceTree = ""; };
+ 37FAD497FE9EAF85447C3018BD5A11C3 /* UISwitch+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISwitch+Rx.swift"; path = "RxCocoa/iOS/UISwitch+Rx.swift"; sourceTree = ""; };
+ 388ED66774BC08CD0D36B3B50213F841 /* RxWebViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxWebViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxWebViewDelegateProxy.swift; sourceTree = ""; };
+ 38C382C7043E56AF09503B57109FF95F /* FGRoute.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FGRoute.xcconfig; sourceTree = ""; };
+ 3914001CECB349E744F4CBAA8D76E504 /* KVORepresentable+Swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "KVORepresentable+Swift.swift"; path = "RxCocoa/Foundation/KVORepresentable+Swift.swift"; sourceTree = ""; };
+ 39C0BCC6506CAAEC9E29F95B43187AB7 /* ShareReplayScope.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShareReplayScope.swift; path = RxSwift/Observables/ShareReplayScope.swift; sourceTree = ""; };
+ 39D504FDE6254E7C6DB805E12933BE96 /* Pods-iOSClientApp-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-iOSClientApp-frameworks.sh"; sourceTree = ""; };
+ 3A5C6ADB6C31166945EE0F8EDB05833A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 3A73CD69BE99FCD1037C92E7AD8BD000 /* RxTextStorageDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTextStorageDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift; sourceTree = ""; };
+ 3A790CC5FE7B85B1FB7E71391B23AF6F /* Zip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zip.swift; path = RxSwift/Observables/Zip.swift; sourceTree = ""; };
+ 3C5C5DD49B51D4BEAF2E9874175029BA /* IQKeyboardManagerConstantsInternal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstantsInternal.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift; sourceTree = ""; };
+ 3D88B21596B6D5EF5E7FC1AC524EEE05 /* RxSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-prefix.pch"; sourceTree = ""; };
+ 3DC3F7338C7D35F2124BD14937BA43A4 /* NSSlider+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSSlider+Rx.swift"; path = "RxCocoa/macOS/NSSlider+Rx.swift"; sourceTree = ""; };
+ 3DC6357AFC6EA6B799E67005A9C00D0E /* RxTableViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxTableViewDataSourceType.swift; sourceTree = ""; };
+ 3E4705D55F7D14134D9E62AE3E43A842 /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITextFieldView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift"; sourceTree = ""; };
+ 3E97C991A776710C6ACF06347645C5B6 /* RxAtomic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RxAtomic.h; path = RxAtomic/include/RxAtomic.h; sourceTree = ""; };
+ 3F84984E438272787F0CBB31C8A561E4 /* UIPickerView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIPickerView+Rx.swift"; path = "RxCocoa/iOS/UIPickerView+Rx.swift"; sourceTree = ""; };
+ 3FB4AB32C6CAC815BE66395ED388FABC /* RxCollectionViewDataSourcePrefetchingProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourcePrefetchingProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDataSourcePrefetchingProxy.swift; sourceTree = ""; };
+ 40D680353D05B7984C5D8C53B4A20F05 /* RxCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 40F4072FECA5075E7E25140D3B7E2C5C /* Delay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delay.swift; path = RxSwift/Observables/Delay.swift; sourceTree = ""; };
+ 40F60FD3B58514668813513B06DE9AD6 /* Merge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Merge.swift; path = RxSwift/Observables/Merge.swift; sourceTree = ""; };
+ 41B6F8DBDC7759EEF10E6838211A39F6 /* Unimplemented.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Unimplemented.swift; path = Source/Unimplemented.swift; sourceTree = ""; };
+ 44FEFB2F9CF3BBE22FFFFF6C6BC1823F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 4538A23CCBBDCDAAB346C428CDAF93F8 /* IQNSArray+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQNSArray+Sort.swift"; path = "IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift"; sourceTree = ""; };
+ 46320E6B4CCA28A689E4B9FF35947CDC /* SkipUntil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkipUntil.swift; path = RxSwift/Observables/SkipUntil.swift; sourceTree = ""; };
+ 46D4D6ED8B17AFCEE2724C6B0AD9A2BB /* RxPickerViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift; sourceTree = ""; };
+ 476BEB82615229CFFDF6876BAB5C2BD5 /* PeripheralProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PeripheralProvider.swift; path = Source/PeripheralProvider.swift; sourceTree = ""; };
+ 47F9F2FB3479A5D76C2734021CB3230B /* _RX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RX.h; path = RxCocoa/Runtime/include/_RX.h; sourceTree = ""; };
+ 497251F6E9CB354BB54A2C89E4A96032 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 49AAE042196C822E6CD00DD3B18C9576 /* InfiniteSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InfiniteSequence.swift; path = Platform/DataStructures/InfiniteSequence.swift; sourceTree = ""; };
+ 49BA752CAA59E5DD00F0545F1C69BFF7 /* SerialDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDispatchQueueScheduler.swift; path = RxSwift/Schedulers/SerialDispatchQueueScheduler.swift; sourceTree = ""; };
+ 4A7216BAF7F45AFA4A899DD3AD407F5A /* BluetoothError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BluetoothError.swift; path = Source/BluetoothError.swift; sourceTree = ""; };
+ 4C6CAC8D814FA8C5FC90329E13973DDB /* BehaviorRelay+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BehaviorRelay+Driver.swift"; path = "RxCocoa/Traits/Driver/BehaviorRelay+Driver.swift"; sourceTree = ""; };
+ 4CB512CBE55A35D233C11B686443CBB8 /* DelegateProxyType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelegateProxyType.swift; path = RxCocoa/Common/DelegateProxyType.swift; sourceTree = ""; };
+ 4CEEE02B7E96EDC98BBAD7DBFBE97847 /* UIBarButtonItem+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIBarButtonItem+Rx.swift"; path = "RxCocoa/iOS/UIBarButtonItem+Rx.swift"; sourceTree = ""; };
+ 4E2FD19443B869EFB77BF7F7D8EA8063 /* RxGestureRecognizerDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxGestureRecognizerDelegate.swift; path = Pod/Classes/RxGestureRecognizerDelegate.swift; sourceTree = ""; };
+ 4F0431720E925FFB47E77FF7585D4022 /* SharedSequence+Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SharedSequence+Operators.swift"; path = "RxCocoa/Traits/SharedSequence/SharedSequence+Operators.swift"; sourceTree = ""; };
+ 4FEB106AEF61D14A0726C851DCDAC497 /* Take.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Take.swift; path = RxSwift/Observables/Take.swift; sourceTree = ""; };
+ 5043CD07A22E913AF2CEBC114BCCB06E /* RefCountDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RefCountDisposable.swift; path = RxSwift/Disposables/RefCountDisposable.swift; sourceTree = ""; };
+ 5048A080CC5854F107513FE694700DFD /* CBPeripheral+Uuid.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CBPeripheral+Uuid.swift"; path = "Source/CBPeripheral+Uuid.swift"; sourceTree = ""; };
+ 5177999A7B9E9BA577C8D7EB28841454 /* Completable+AndThen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Completable+AndThen.swift"; path = "RxSwift/Traits/Completable+AndThen.swift"; sourceTree = ""; };
+ 52C9050A8AAD02F3DFC773863740A163 /* RxPickerViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxPickerViewDataSourceType.swift; sourceTree = ""; };
+ 52C9D88AF62F4886FAD787A44851EE21 /* ScheduledItemType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledItemType.swift; path = RxSwift/Schedulers/Internal/ScheduledItemType.swift; sourceTree = ""; };
+ 5329778B4735B9504DE7FC16CAB63ECF /* RxAtomic-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxAtomic-prefix.pch"; sourceTree = ""; };
+ 5368974969F66FC538B51ED227F451B2 /* NotificationCenter+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NotificationCenter+Rx.swift"; path = "RxCocoa/Foundation/NotificationCenter+Rx.swift"; sourceTree = ""; };
+ 53756FEC4BEAFC89FF1FC11F383226E3 /* _RXDelegateProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RXDelegateProxy.m; path = RxCocoa/Runtime/_RXDelegateProxy.m; sourceTree = ""; };
+ 53D9EC8F13408A7E6BEB5C25AE397E90 /* TakeLast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeLast.swift; path = RxSwift/Observables/TakeLast.swift; sourceTree = ""; };
+ 54E613DCC5EFE08AD2B37BB2D0033252 /* RxBluetoothKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxBluetoothKit.modulemap; sourceTree = ""; };
+ 551D8F0EEF9D3CB923FFC188BBF7B42D /* _RXDelegateProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RXDelegateProxy.h; path = RxCocoa/Runtime/include/_RXDelegateProxy.h; sourceTree = ""; };
+ 556D579D4E89F22D4317262EB2FD52B3 /* Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debug.swift; path = RxSwift/Observables/Debug.swift; sourceTree = ""; };
+ 562342FCC763775A5BC1BA45DDA82E25 /* NSObject+Rx.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "NSObject+Rx.xcconfig"; sourceTree = ""; };
+ 5660B6B96B35DCB312176B61410A6492 /* _RXKVOObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RXKVOObserver.m; path = RxCocoa/Runtime/_RXKVOObserver.m; sourceTree = ""; };
+ 56C60CE65CE2DB7C1C3B41AFD5BB82A6 /* RxTableViewDataSourcePrefetchingProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDataSourcePrefetchingProxy.swift; path = RxCocoa/iOS/Proxies/RxTableViewDataSourcePrefetchingProxy.swift; sourceTree = ""; };
+ 5779E37ACF870FDCDA584A60DFA42BBB /* CurrentThreadScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CurrentThreadScheduler.swift; path = RxSwift/Schedulers/CurrentThreadScheduler.swift; sourceTree = ""; };
+ 5785887C13D30325BF3B7D32524252C1 /* RxTabBarDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTabBarDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift; sourceTree = ""; };
+ 5843D463902DF257912788EA69C900C0 /* NSObject+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSObject+Rx.swift"; sourceTree = ""; };
+ 58E2F30C45A82E9823067A33E2663A16 /* GestureRecognizer+RxGesture.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "GestureRecognizer+RxGesture.swift"; path = "Pod/Classes/GestureRecognizer+RxGesture.swift"; sourceTree = ""; };
+ 5937068E92FD5CAD445644D30149943D /* SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SharedSequence.swift; path = RxCocoa/Traits/SharedSequence/SharedSequence.swift; sourceTree = ""; };
+ 5952207BC72AE360BEF8B8722BDB23A7 /* URLSession+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSession+Rx.swift"; path = "RxCocoa/Foundation/URLSession+Rx.swift"; sourceTree = ""; };
+ 5B464AE19B99CEDAD4A8A2EAE881808A /* PriorityQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PriorityQueue.swift; path = Platform/DataStructures/PriorityQueue.swift; sourceTree = ""; };
+ 5B47AA757F5EC55EC59E4B8DAF90524E /* KVORepresentable+CoreGraphics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "KVORepresentable+CoreGraphics.swift"; path = "RxCocoa/Foundation/KVORepresentable+CoreGraphics.swift"; sourceTree = ""; };
+ 5C2D5BB9B58B2E5424105F9796CAEC61 /* ObserverBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserverBase.swift; path = RxSwift/Observers/ObserverBase.swift; sourceTree = ""; };
+ 5CB4B33401887A0CEB6E06276AF5FDD2 /* Platform.Linux.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Linux.swift; path = Platform/Platform.Linux.swift; sourceTree = ""; };
+ 5CBC0239866C59B6CD007897F2363093 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 5D3283700A63E1DE0D386A5EC0B63A01 /* Pods-iOSClientApp-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-iOSClientApp-resources.sh"; sourceTree = ""; };
+ 5D5362F9F5F47CF5D7C5DA95E7A251D8 /* RxSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxSwift-dummy.m"; sourceTree = ""; };
+ 5D5CA29F6838D09153BEC8B11EC012F1 /* PeripheralManagerRestoredState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PeripheralManagerRestoredState.swift; path = Source/PeripheralManagerRestoredState.swift; sourceTree = ""; };
+ 5D70383C9F44135ED7D76F5008098AD1 /* Generate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Generate.swift; path = RxSwift/Observables/Generate.swift; sourceTree = ""; };
+ 5D898A2EC801C4D45219E85C4CEF8379 /* Queue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Queue.swift; path = Platform/DataStructures/Queue.swift; sourceTree = ""; };
+ 5DD2C53A862C7A3FA0A68423668A2BB5 /* UILongPressGestureRecognizer+RxGesture.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILongPressGestureRecognizer+RxGesture.swift"; path = "Pod/Classes/iOS/UILongPressGestureRecognizer+RxGesture.swift"; sourceTree = ""; };
+ 5E95DCF2729C5E5E6DCE0D6467A291DE /* Using.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Using.swift; path = RxSwift/Observables/Using.swift; sourceTree = ""; };
+ 603D7E0069FE179200D3900F81CBDE61 /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = ""; };
+ 609000FAAD490CB39FA2AB7163219814 /* UITextField+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITextField+Rx.swift"; path = "RxCocoa/iOS/UITextField+Rx.swift"; sourceTree = ""; };
+ 60947C2B4DA49CD609394E214783D009 /* Descriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Descriptor.swift; path = Source/Descriptor.swift; sourceTree = ""; };
+ 60FEF1E298AAE6A4EA9A6842A3F18C7C /* ScannedPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScannedPeripheral.swift; path = Source/ScannedPeripheral.swift; sourceTree = ""; };
+ 61927D9D067FF80F605FB94755049618 /* IQKeyboardReturnKeyHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnKeyHandler.swift; path = IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift; sourceTree = ""; };
+ 62A2C9C59AE77432FCF483E96330ACEF /* RxBluetoothKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxBluetoothKit.xcconfig; sourceTree = ""; };
+ 63264940B3AD13650EEFCFC279088104 /* ObservableConvertibleType+SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+SharedSequence.swift"; path = "RxCocoa/Traits/SharedSequence/ObservableConvertibleType+SharedSequence.swift"; sourceTree = ""; };
+ 63EC0EC2DD903A8D8FEEEB7484F4E502 /* RxGesture-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxGesture-dummy.m"; sourceTree = ""; };
+ 64B9BFDBD83B25BB744521A41E5A4D51 /* RxSearchBarDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxSearchBarDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift; sourceTree = ""; };
+ 65C457A2256EE1E7B3667FB4FCB6BCA7 /* SubscribeOn.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscribeOn.swift; path = RxSwift/Observables/SubscribeOn.swift; sourceTree = ""; };
+ 66E140F8E31CB2F5A81087787E9232CE /* RxCollectionViewDataSourceProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourceProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDataSourceProxy.swift; sourceTree = ""; };
+ 678921C6D44A33423492FC857F829302 /* RxPickerViewAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewAdapter.swift; path = RxCocoa/iOS/DataSources/RxPickerViewAdapter.swift; sourceTree = ""; };
+ 68D9FB3F288ACCE759B3750F51067BA8 /* OperationQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OperationQueueScheduler.swift; path = RxSwift/Schedulers/OperationQueueScheduler.swift; sourceTree = ""; };
+ 690026D6D460C25EC167FC99A2F456BC /* DefaultIfEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultIfEmpty.swift; path = RxSwift/Observables/DefaultIfEmpty.swift; sourceTree = ""; };
+ 6CA09970925B872E668C1590290F5522 /* RxCollectionViewReactiveArrayDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewReactiveArrayDataSource.swift; path = RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift; sourceTree = ""; };
+ 6D6560CB7345D655B59BD24CA6DFC6B3 /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift; sourceTree = ""; };
+ 6D9A246424F47F9AD61658EE90B006D3 /* Characteristic.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Characteristic.swift; path = Source/Characteristic.swift; sourceTree = ""; };
+ 6EBDC70F05265F05FD41A237231041C3 /* Zip+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Zip+Collection.swift"; path = "RxSwift/Observables/Zip+Collection.swift"; sourceTree = ""; };
+ 70128A42D3D8258FF914AF4D4C358E84 /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 7019B1386FB39A9FD7A453D0494A460E /* PrimitiveSequence+Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PrimitiveSequence+Zip+arity.swift"; path = "RxSwift/Traits/PrimitiveSequence+Zip+arity.swift"; sourceTree = ""; };
+ 70CC920E792BFE6ED6FB67ECF971C928 /* UITextView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITextView+Rx.swift"; path = "RxCocoa/iOS/UITextView+Rx.swift"; sourceTree = ""; };
+ 70DDB3C3BCF02BAE17B4729616805A15 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "