diff --git a/TURecipientBar.xcodeproj/project.pbxproj b/TURecipientBar.xcodeproj/project.pbxproj index 740ec09..801135b 100644 --- a/TURecipientBar.xcodeproj/project.pbxproj +++ b/TURecipientBar.xcodeproj/project.pbxproj @@ -194,7 +194,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = TU; - LastUpgradeCheck = 0460; + LastUpgradeCheck = 0810; ORGANIZATIONNAME = ThinkUltimate; }; buildConfigurationList = 110611C01742E2D400730F01 /* Build configuration list for PBXProject "TURecipientBar" */; @@ -281,25 +281,35 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; @@ -312,18 +322,27 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; @@ -338,6 +357,7 @@ GCC_PREFIX_HEADER = "TURecipientBarExample/TURecipientBar-Prefix.pch"; INFOPLIST_FILE = "TURecipientBarExample/TURecipientBar-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.ThinkUltimate.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; @@ -351,6 +371,7 @@ GCC_PREFIX_HEADER = "TURecipientBarExample/TURecipientBar-Prefix.pch"; INFOPLIST_FILE = "TURecipientBarExample/TURecipientBar-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.ThinkUltimate.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; diff --git a/TURecipientBar/TURecipient.h b/TURecipientBar/TURecipient.h index b907645..a0405e1 100644 --- a/TURecipientBar/TURecipient.h +++ b/TURecipientBar/TURecipient.h @@ -25,7 +25,7 @@ You can create a category that returns a different property for this value. For instance, an `NSManagedObject` could return it's name property */ -@property (nonatomic, readonly, copy) NSString *recipientTitle; +@property (nonatomic, readonly, copy, nonnull) NSString *recipientTitle; @end @@ -49,13 +49,13 @@ This is for backwards compatability. Use `recipientTitle` instead. */ -@property (nonatomic, readonly, copy) NSString *title __attribute__((deprecated)); +@property (nonatomic, readonly, copy, nonnull) NSString *title __attribute__((deprecated)); /** A generic reference to a model. You can use this to keep track of what a recipient points to. */ -@property (nonatomic, readonly, strong) id address; +@property (nonatomic, readonly, strong, nullable) id address; /** Create a new recipient. @@ -63,6 +63,6 @@ Because this class is immutable, this is the only way to set the title and address properties. If you need to make a change, you should create a new one. This is because the recipients bar will not track changes. */ -+ (id)recipientWithTitle:(NSString *)title address:(id)address; ++ (nonnull id)recipientWithTitle:(nonnull NSString *)title address:(nullable id)address; @end diff --git a/TURecipientBar/TURecipientsBar.h b/TURecipientBar/TURecipientsBar.h index 01543c7..d032326 100644 --- a/TURecipientBar/TURecipientsBar.h +++ b/TURecipientBar/TURecipientsBar.h @@ -30,7 +30,7 @@ The default value is nil. */ -@property (nonatomic, copy) NSString *text; +@property (nonatomic, copy, nullable) NSString *text; /** The text for the label in front of both the search field and tokens. @@ -40,13 +40,13 @@ Use `toLabel` instead. */ -@property (nonatomic, copy) NSString *label __attribute__((deprecated)); +@property (nonatomic, copy, nullable) NSString *label __attribute__((deprecated)); /** The string that is displayed when there is no other text in the search field. The default value is nil. */ -@property (nonatomic, copy) NSString *placeholder; +@property (nonatomic, copy, nullable) NSString *placeholder; /** Whether the bar is searching or not. @@ -80,19 +80,19 @@ You can use this to customize the text input attributes for searching. */ -@property (nonatomic, readonly) UITextField *textField; +@property (nonatomic, readonly, nonnull) UITextField *textField; -@property (nonatomic, readonly) UIView *lineView; +@property (nonatomic, readonly, nonnull) UIView *lineView; -@property (nonatomic, readonly) UIButton *addButton; +@property (nonatomic, readonly, nonnull) UIButton *addButton; -@property (nonatomic, readonly) UILabel *summaryLabel; +@property (nonatomic, readonly, nonnull) UILabel *summaryLabel; /** The label in front of both the search field and tokens. The default text is "To: ". You can set the text to nil to disable the label entirely. */ -@property (nonatomic, readonly) UILabel *toLabel; +@property (nonatomic, readonly, nonnull) UILabel *toLabel; /** Whether the add button should appear. @@ -126,7 +126,7 @@ You can also change the priority. It must be lower than whatever constraint you are using to limit the bars height. The default priority is `UILayoutPriorityDefaultHigh` (`750`). */ -@property (nonatomic, weak) IBOutlet NSLayoutConstraint *heightConstraint; +@property (nonatomic, weak, nullable) IBOutlet NSLayoutConstraint *heightConstraint; /**--------------------------------------------------------------------------------------- @@ -138,7 +138,7 @@ The delegate should conform to the TURecipientsBarDelegate protocol. Set this property to further modify the behavior. The default value is nil. */ -@property (nonatomic, weak) id recipientsBarDelegate; +@property (nonatomic, weak, nullable) id recipientsBarDelegate; /**--------------------------------------------------------------------------------------- @@ -152,7 +152,7 @@ Items are of type TURecipient. */ -@property (nonatomic, readonly) NSArray *recipients; +@property (nonatomic, readonly, nonnull) NSArray> *recipients; /** Add a recipient. @@ -160,7 +160,7 @@ @param recipient A recipient to add. */ -- (void)addRecipient:(id)recipient; +- (void)addRecipient:(nonnull id)recipient; /** Remove a recipient. @@ -168,13 +168,13 @@ @param recipient A recipient to remove. */ -- (void)removeRecipient:(id)recipient; +- (void)removeRecipient:(nonnull id)recipient; /** The currently selected recipient. If the bar is in search mode, you can use this to select the token that represents it. If the bar is not searching, this has no effect. */ -@property (nonatomic, strong) id selectedRecipient; +@property (nonatomic, strong, nullable) id selectedRecipient; /** Select a recipient. @@ -184,7 +184,7 @@ @param recipient A recipient to select. */ -- (void)selectRecipient:(id)recipient __attribute__((deprecated)); +- (void)selectRecipient:(nullable id)recipient __attribute__((deprecated)); /**--------------------------------------------------------------------------------------- @@ -199,7 +199,7 @@ @param backgroundImage The background image to use. This should be a resizable image. @param state The state to use this background in. */ -- (void)setRecipientBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state UI_APPEARANCE_SELECTOR; +- (void)setRecipientBackgroundImage:(nullable UIImage *)backgroundImage forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** The background image for the token that represents a recipient. @@ -208,7 +208,7 @@ @param state The state to use this background in. @return The background image for the given state. */ -- (UIImage *)recipientBackgroundImageForState:(UIControlState)state UI_APPEARANCE_SELECTOR; +- (nullable UIImage *)recipientBackgroundImageForState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** The edge insets for the token that represents a recipient. @@ -224,7 +224,7 @@ @param state The state to use the attributes in. */ -- (void)setRecipientTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state UI_APPEARANCE_SELECTOR; +- (void)setRecipientTitleTextAttributes:(nullable NSDictionary *)attributes forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** The text attributes for the token that represents a recipient. @@ -235,27 +235,27 @@ @param state The state to use this background in. @return The text attributes override for the given state. */ -- (NSDictionary *)recipientTitleTextAttributesForState:(UIControlState)state UI_APPEARANCE_SELECTOR; +- (nullable NSDictionary *)recipientTitleTextAttributesForState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** The text attributes applied to the label. */ -@property (nonatomic, copy) NSDictionary *labelTextAttributes UI_APPEARANCE_SELECTOR __attribute__((deprecated)); +@property (nonatomic, copy, nullable) NSDictionary *labelTextAttributes UI_APPEARANCE_SELECTOR __attribute__((deprecated)); /** The text attributes applied to the summary. */ -@property (nonatomic, copy) NSDictionary *summaryTextAttributes UI_APPEARANCE_SELECTOR; +@property (nonatomic, copy, nullable) NSDictionary *summaryTextAttributes UI_APPEARANCE_SELECTOR; /** The text attributes applied to the search text field. Only the font and foreground color are used. */ -@property (nonatomic, copy) NSDictionary *searchFieldTextAttributes UI_APPEARANCE_SELECTOR; +@property (nonatomic, copy, nullable) NSDictionary *searchFieldTextAttributes UI_APPEARANCE_SELECTOR; /** The text attributes applied to the placeholder. Note that at this time, changing summaryTextAttributes or recipientTitleTextAttributesForState: will not change the placeholder attributes. */ -@property (nonatomic, copy) NSDictionary *placeholderTextAttributes UI_APPEARANCE_SELECTOR; +@property (nonatomic, copy, nullable) NSDictionary *placeholderTextAttributes UI_APPEARANCE_SELECTOR; /** Whether the recipient bar should use a visual effect for it's background. @@ -282,7 +282,7 @@ @param recipientsBar The recipient bar that is being edited. @return `YES` if an editing session should be initiated, otherwise, `NO`. */ -- (BOOL)recipientsBarShouldBeginEditing:(TURecipientsBar *)recipientsBar; +- (BOOL)recipientsBarShouldBeginEditing:(nonnull TURecipientsBar *)recipientsBar; /** Tells the delegate when the user begins editing the search text. @@ -290,7 +290,7 @@ @param recipientsBar The recipient bar that is being edited. */ -- (void)recipientsBarTextDidBeginEditing:(TURecipientsBar *)recipientsBar; +- (void)recipientsBarTextDidBeginEditing:(nonnull TURecipientsBar *)recipientsBar; /** Asks the delegate if editing should stop in the specified search bar. @@ -299,7 +299,7 @@ @param recipientsBar The recipient bar that is being edited. @return `YES` if editing should stop, otherwise, `NO`. */ -- (BOOL)recipientsBarShouldEndEditing:(TURecipientsBar *)recipientsBar; +- (BOOL)recipientsBarShouldEndEditing:(nonnull TURecipientsBar *)recipientsBar; /** Tells the delegate that the user finished editing the search text. @@ -307,7 +307,7 @@ @param recipientsBar The recipient bar that is being edited. */ -- (void)recipientsBarTextDidEndEditing:(TURecipientsBar *)recipientsBar; +- (void)recipientsBarTextDidEndEditing:(nonnull TURecipientsBar *)recipientsBar; /** Tells the delegate that the user changed the search text. @@ -316,7 +316,7 @@ @param recipientsBar The recipient bar that is being edited. @param searchText The current text in the search text field. */ -- (void)recipientsBar:(TURecipientsBar *)recipientsBar textDidChange:(NSString *)searchText; +- (void)recipientsBar:(nonnull TURecipientsBar *)recipientsBar textDidChange:(nullable NSString *)searchText; /** Asks the delegate if editing should stop in the specified recipient bar. @@ -327,7 +327,7 @@ @param text The text to replace existing text in range. @return `YES` if text in range should be replaced by text, otherwise, `NO`. */ -- (BOOL)recipientsBar:(TURecipientsBar *)recipientsBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text; +- (BOOL)recipientsBar:(nonnull TURecipientsBar *)recipientsBar shouldChangeTextInRange:(NSRange)range replacementText:(nullable NSString *)text; /**--------------------------------------------------------------------------------------- * @name Selection @@ -342,7 +342,7 @@ @param recipient The recipient being selected. @return `YES` if the recipient should be selected, otherwise, `NO`. */ -- (BOOL)recipientsBar:(TURecipientsBar *)recipientsBar shouldSelectRecipient:(id)recipient; +- (BOOL)recipientsBar:(nonnull TURecipientsBar *)recipientsBar shouldSelectRecipient:(nonnull id)recipient; /** Tells the delegate that recipient selection has changed. @@ -351,7 +351,7 @@ @param recipientsBar The recipient bar that is being edited. @param recipient The recipient that was selected. */ -- (void)recipientsBar:(TURecipientsBar *)recipientsBar didSelectRecipient:(id)recipient; +- (void)recipientsBar:(nonnull TURecipientsBar *)recipientsBar didSelectRecipient:(nonnull id)recipient; /**--------------------------------------------------------------------------------------- * @name Clicking Buttons @@ -364,7 +364,7 @@ @param recipientsBar The recipient bar that is being edited. */ -- (void)recipientsBarReturnButtonClicked:(TURecipientsBar *)recipientsBar; +- (void)recipientsBarReturnButtonClicked:(nonnull TURecipientsBar *)recipientsBar; /** Tells the delegate when the add button is pressed. @@ -372,6 +372,6 @@ @param recipientsBar The recipient bar that is being edited. */ -- (void)recipientsBarAddButtonClicked:(TURecipientsBar *)recipientsBar; +- (void)recipientsBarAddButtonClicked:(nonnull TURecipientsBar *)recipientsBar; @end diff --git a/TURecipientBar/TURecipientsDisplayController.h b/TURecipientBar/TURecipientsDisplayController.h index 6eab8cd..be0cf99 100644 --- a/TURecipientBar/TURecipientsDisplayController.h +++ b/TURecipientBar/TURecipientsDisplayController.h @@ -40,13 +40,13 @@ The `TURecipientsBarDelegate` methods are also called on the controller's delegates, after the controller processes them. */ -@property (nonatomic, weak) IBOutlet id delegate; +@property (nonatomic, weak, nullable) IBOutlet id delegate; /** The corresponding recipients bar. The controller is mostly useless if this is not set. */ -@property (nonatomic, strong) IBOutlet TURecipientsBar *recipientsBar; +@property (nonatomic, strong, nullable) IBOutlet TURecipientsBar *recipientsBar; /** The view controller to display the search results with. @@ -55,27 +55,27 @@ attach to the bottom, right and left of the view, and the bottom of the recipients bar. For obvious reasons, the view property should return a UIView and not a UIScrollView. */ -@property (nonatomic, weak) IBOutlet UIViewController *contentsController; +@property (nonatomic, weak, nullable) IBOutlet UIViewController *contentsController; /** The table view used to display search results. This table is populated and controlled with `searchResultsDataSource` and `searchResultsDelegate`. */ -@property (nonatomic, readonly, strong) UITableView *searchResultsTableView; +@property (nonatomic, readonly, strong, nullable) UITableView *searchResultsTableView; /** The datasource for the `searchResultsTableView` You can display whatever content you want, but generally will show the search results filtered by the recipients bar search string. */ -@property (nonatomic, weak) IBOutlet id searchResultsDataSource; +@property (nonatomic, weak, nullable) IBOutlet id searchResultsDataSource; /** The delegate for the `searchResultsTableView` You can respond to the table however you like, but typically will add a recipient when the user selects a row. */ -@property (nonatomic, weak) IBOutlet id searchResultsDelegate; +@property (nonatomic, weak, nullable) IBOutlet id searchResultsDelegate; /** Create a controller @@ -90,7 +90,7 @@ @param viewController The viewController for the controller. @return A controller ready to be used. */ -- (id)initWithRecipientsBar:(TURecipientsBar *)recipientsBar contentsController:(UIViewController *)viewController; +- (nonnull id)initWithRecipientsBar:(nullable TURecipientsBar *)recipientsBar contentsController:(nullable UIViewController *)viewController; @end @@ -119,31 +119,31 @@ @param controller The recipients display controller for which the receiver is the delegate. @return `YES` to show the search UI, otherwise, `NO`. */ -- (BOOL)recipientsDisplayControllerShouldBeginSearch:(TURecipientsDisplayController *)controller; +- (BOOL)recipientsDisplayControllerShouldBeginSearch:(nonnull TURecipientsDisplayController *)controller; /** Tells the delegate that the controller is about to begin searching. @param controller The recipients display controller for which the receiver is the delegate. */ -- (void)recipientsDisplayControllerWillBeginSearch:(TURecipientsDisplayController *)controller; +- (void)recipientsDisplayControllerWillBeginSearch:(nonnull TURecipientsDisplayController *)controller; /** Tells the delegate that the controller is about to begin searching. @param controller The recipients display controller for which the receiver is the delegate. */ -- (void)recipientsDisplayControllerDidBeginSearch:(TURecipientsDisplayController *)controller; +- (void)recipientsDisplayControllerDidBeginSearch:(nonnull TURecipientsDisplayController *)controller; /** Tells the delegate that the controller is about to end searching. @param controller The recipients display controller for which the receiver is the delegate. */ -- (void)recipientsDisplayControllerWillEndSearch:(TURecipientsDisplayController *)controller; +- (void)recipientsDisplayControllerWillEndSearch:(nonnull TURecipientsDisplayController *)controller; /** Tells the delegate that the controller has finished searching. @param controller The recipients display controller for which the receiver is the delegate. */ -- (void)recipientsDisplayControllerDidEndSearch:(TURecipientsDisplayController *)controller; +- (void)recipientsDisplayControllerDidEndSearch:(nonnull TURecipientsDisplayController *)controller; /**--------------------------------------------------------------------------------------- @@ -158,7 +158,7 @@ @param controller The recipients display controller for which the receiver is the delegate. @param tableView The `searchResultsTableView` that was just loaded. */ -- (void)recipientsDisplayController:(TURecipientsDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView; +- (void)recipientsDisplayController:(nonnull TURecipientsDisplayController *)controller didLoadSearchResultsTableView:(nonnull UITableView *)tableView; /** Tells the delegate that the controller is about to unload its table view. @@ -168,7 +168,7 @@ @param controller The recipients display controller for which the receiver is the delegate. @param tableView The `searchResultsTableView` that was just loaded. */ -- (void)recipientsDisplayController:(TURecipientsDisplayController *)controller willUnloadSearchResultsTableView:(UITableView *)tableView; +- (void)recipientsDisplayController:(nonnull TURecipientsDisplayController *)controller willUnloadSearchResultsTableView:(nonnull UITableView *)tableView; /**--------------------------------------------------------------------------------------- @@ -181,7 +181,7 @@ @param controller The recipients display controller for which the receiver is the delegate. @param tableView The recipients display controller’s table view. */ -- (void)recipientsDisplayController:(TURecipientsDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView; +- (void)recipientsDisplayController:(nonnull TURecipientsDisplayController *)controller willShowSearchResultsTableView:(nonnull UITableView *)tableView; /** Tells the delegate to add the search table view to the view hierarchy. @@ -195,28 +195,28 @@ @param controller The recipients display controller for which the receiver is the delegate. @param tableView The recipients display controller’s table view. */ -- (void)recipientsDisplayController:(TURecipientsDisplayController *)controller displaySearchResultsTableView:(UITableView *)tableView; +- (void)recipientsDisplayController:(nonnull TURecipientsDisplayController *)controller displaySearchResultsTableView:(nonnull UITableView *)tableView; /** Tells the delegate that the controller just displayed its table view. @param controller The recipients display controller for which the receiver is the delegate. @param tableView The recipients display controller’s table view. */ -- (void)recipientsDisplayController:(TURecipientsDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView; +- (void)recipientsDisplayController:(nonnull TURecipientsDisplayController *)controller didShowSearchResultsTableView:(nonnull UITableView *)tableView; /** Tells the delegate that the controller is about to hide its table view. @param controller The recipients display controller for which the receiver is the delegate. @param tableView The recipients display controller’s table view. */ -- (void)recipientsDisplayController:(TURecipientsDisplayController *)controller willHideSearchResultsTableView:(UITableView *)tableView; +- (void)recipientsDisplayController:(nonnull TURecipientsDisplayController *)controller willHideSearchResultsTableView:(nonnull UITableView *)tableView; /** Tells the delegate that the controller just hid its table view. @param controller The recipients display controller for which the receiver is the delegate. @param tableView The recipients display controller’s table view. */ -- (void)recipientsDisplayController:(TURecipientsDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView; +- (void)recipientsDisplayController:(nonnull TURecipientsDisplayController *)controller didHideSearchResultsTableView:(nonnull UITableView *)tableView; /**--------------------------------------------------------------------------------------- @@ -237,7 +237,7 @@ @param searchString The string in the search bar. @return `YES` if the display controller should reload the data in its table view, otherwise `NO`. */ -- (BOOL)recipientsDisplayController:(TURecipientsDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString; +- (BOOL)recipientsDisplayController:(nonnull TURecipientsDisplayController *)controller shouldReloadTableForSearchString:(nullable NSString *)searchString; /**--------------------------------------------------------------------------------------- @@ -258,7 +258,7 @@ @param recipient The recipient the controller is about to add. @return The recipient to add. */ -- (id)recipientsDisplayController:(TURecipientsDisplayController *)controller willAddRecipient:(id)recipient; +- (nullable id)recipientsDisplayController:(nonnull TURecipientsDisplayController *)controller willAddRecipient:(nonnull id)recipient; /** Tells the delegate when a recipient has been added @@ -267,7 +267,7 @@ @param controller The recipients display controller for which the receiver is the delegate. @param recipient The recipient that was added. */ -- (void)recipientsDisplayController:(TURecipientsDisplayController *)controller didAddRecipient:(id)recipient; +- (void)recipientsDisplayController:(nonnull TURecipientsDisplayController *)controller didAddRecipient:(nonnull id)recipient; /** Tell the delegate when a recipient is removed @@ -276,6 +276,6 @@ @param controller The recipients display controller for which the receiver is the delegate. @param recipient The recipient that was removed. */ -- (void)recipientsDisplayController:(TURecipientsDisplayController *)controller didRemoveRecipient:(id)recipient; +- (void)recipientsDisplayController:(nonnull TURecipientsDisplayController *)controller didRemoveRecipient:(nonnull id)recipient; @end diff --git a/TURecipientBarExample/TURecipientBar-Info.plist b/TURecipientBarExample/TURecipientBar-Info.plist index 2d9e310..ef84027 100644 --- a/TURecipientBarExample/TURecipientBar-Info.plist +++ b/TURecipientBarExample/TURecipientBar-Info.plist @@ -2,6 +2,8 @@ + NSContactsUsageDescription + Let us search your contacts. CFBundleDevelopmentRegion en CFBundleDisplayName @@ -13,7 +15,7 @@ CFBundleIcons~ipad CFBundleIdentifier - com.ThinkUltimate.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName