We need a codesnippet for an iPhone app which does the following:
- Grabs all the contacts from the iPhone
- Iterates through ALL phone properties of the contact and filters the mobile phone numbers, based on Excel with mobile prefixes for countries we will provide.
- Presents the contacts in an indexed tableview with index list (like native contacts app) displaying in the cell, the contacts name and below the mobile number of the contact. If there are contacts that are non english/latin localized they should be displayed in index # (like native contacts app). If a contact has more than one mobile phone (based on the prefixes) the contact is added twice in the list.
- didSelectForRowAtIndexPath on the table should provide an Action Sheet with "Remove contact from list" and cancel
- The whole process should be optmizied and really fast! Tester has 2200 contacts.
- The mobile prefixes should not be hardcoded in the code but retrieved from a property list or other data structure we can easily edit, but not CoreData or SQLite since it adds overhead in the project we dont want.
- There should be a datastructure holding all the mobile phones in the international format (12 digits) because its required for other functionality of the app.
**Please place a bid only if you include some work of yours in the App Store and only if you are really sure how to FAST implement the above code snippet**
The deliverable should be a really basic XCode project/iPhone app with 1 view just to demonstrate the functionality.
The view contains 1 button "Select all contacts" and an indexed table view with an index of A-Z, # on the right like native contacts app.
When the user clicks the "Select all contacts" button a method is called that:
- Grabs all the addressbook contacts from the device
- Iterates through ALL the phone properties of each contact and matches mobile phone numbers based on mobile prefixes for each country we will provide in Excel format. The Excel contains both international and mobile prefixes so the phone number should be matched for International_prefix+mobile_prefix or just mobile_prefix. The prefix filtering should be not hardcoded in the code but retrieved from a property list or other data structure (not CoreData or SQLite since it adds overhead and complexity) so we can easily add/remove countries and prefixes
- Each contact that has a phone property that matches the mobile phone criteria should be added in the indexed tableview under the appropriate section displaying the contacts full name and below the mobile number matched. If a contact has 2 or more phone properties matched as mobile phones should be added again in the table view. If a contact's name localization is other than English/Latin it should be added in the # section of the tableview like native contacts app. English/Latin localized contacts should be added in the appropriate alphabetical index (e.x Aaron Jones should be under A, Bison Jones under B etc).
- didSelectRowAtIndexPath delegate of the tableview should provide an Action Sheet with "Remove contact from list" and cancel. "Remove contact from list" removes from the list only the contact - mobile phone pair selected and not all occurences of the contact.
REQUIRED & IMPORTANT functionality:
- The above procedure should be really really really fast. Testings will be conducted on device with ~2200 contacts. Even if it takes some time to add all the contacts in the list the application should provide feedback to the user that it's indeed doing something either by displaying a status "Adding x of Y contacts" where x is a number iterating and Y is number of Total contacts or by updating periodically the tableview while new contacts are added.
- When the whole procedure is finished (all contacts added, user removed any unwanted via the action sheet) there should be a data structure available containing all the mobile phones of the contacts in the tableview in international format (12 digits containing the international prefix even if the mobile phone was stored in the phone without it)
- Code should handle memory well and should be leak-free
- Code should be extensively commented and easy to adapt to the current project it will be added