You shall have experience of developing simple applications for iPhone. Experience of following APIs is recommended: CoreLocations, MapKit, Push Notifications.
Certain knowledge in iPhone SDK 3.2.3? preferably in new APIs as iAd and Multitasking is also recommended but not required.
Knowledge in programming "up-/downloading text"-functionality against a serverside database is also recommended.
## Deliverables
Besides requirements mentioned in the summary the programmer must be able to:
-? Test the application on a iPhone running iPhone OS 4.0 Beta.
- ? Setup a temporary server providing a database for testing the functionality of the application.
________________________________________________________
Application summary
The application consists of three main views, a map, a submitting page and settings. The core functionality is for the user to be able to view the map and its annotations which are submitted by other users of the application via the submitting page.
Furthermore shall notifications alert the user when he or she is near one of these annotations. Multitasking support is required combined with implementation of CoreLocations SignificantLocationChanges providing background alerts.
The user shall also be able to set a timer for how long the application will remain active or for how long the application will remain active after not changing location significantly.
It will also constantly check for updates server-side and if there is a updated post it will be downloaded and stored in the local database.
________________________________________________________
Application detailed description
Upon launch the application must ask the user to allow the usage of its current location.
The UI of the application is based on the UIView combined with UITabBar. The TabBar will contain three tabs;
- ? "Map" - This is also the first screen viewed after opening the application.
- ? "Submit"
- ? "Settings"
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Map view
When viewing the tab "Map" it shall show an map based on the Map Kit API. The map shall upon launch show the users current location after fetching GPS-coordinates. The map will also show annotations based on coordinates from local database retrieving updates from a server-based database. Annotations must be clickable and when opening one it will show further information provided from the database. This information is completely text-based.
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Submit view
This view will contain certain choices which are chosen through the Picker View when tapped at. Some whose content depends of a previous choice in a Picker, some with independent content. Some will also be dependent of geographical location. About 5 or 6 of these will be needed. Even if it is still uncertain number the complexity of this function is very low and during the early stages of the development a amount will be defined. Underneath a textfield is presented for additional information.
A button in at the far bottom of the page labeled "Submit". Upon pressing this button the application will first check so every required option is chosen. Then it will start to locate the users current location. If successful the coordinates together with the information chosen in the pickers and in the textfield will be submitted to the server database used by Map view. No data created locally shall be stored, only data from the server is allowed. If the application fails to connect the GPS the user will be prompted with a message telling it was unable to retrieve the current location.
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Settings view
Here the user should be able to control how long the app will be open after executing it. Preferably one On/Off switch combined with a picker with a few time interval suggestions.
A similar setting which instead relate to the last time a significant change in position shall be provided underneath/next to. When the one of the timers has reached the desired interval the user shall be prompt with a local notification telling him or her that the application will close. If no action is done by the user in 1 minute or the user choses to agree, the application will close. If the user choses open the application instead, the timers are reset to start from the beginning.?
One On/Off switch for enabling/disabling notifications by the application.
A picker for choosing how large the radius between user and annotation must be for not triggering a notification.
________________________________________________________
Application background services
Whenever the location is updated due to a significant change a function which check if the user is in the desired distance from any annotations will be called. If true, the function will not be called again until next significant change. If false, the user will be prompt with a notification telling him or her that there is a annotation inside their chosen range. Annotations created more than 6 hours will be ignored.
Once a user has been notified, the annotation which triggered the function will not be able to trigger the function again until the desired distance between user and annotation has been reached. After that it is possible for the annotation to trigger the function again if the distance is below desired. Also annotations created within 2 hours and also 500m from the triggering notification will be ignored.
Besides checking the distance between annotations and user the application must also constantly update its database containing annotations from the server. The idea is to regularly check against the server if the database has been updated. If not, no action will be made. If the database has been updated server-side, the application shall download the updated lines, at the same time force a update of the current location and check if the user is in the desired distance or further away. After 23.00 the update interval shall be decreased to save battery life and be normalized again at 05.00.
The local database storing annotations shall delete every post older than 12 hours.?
________________________________________________________
Testing
You as the programmer must provide a roughly beta-tested software which follows Apple's AppStore guidelines for approval. No extensive multiple users testing is required by you. If the application is rejected due to bad coding the project is considered as not completed and preferably by my opinion the deadline will be postponed and the coder will fix the errors. This is _only_ if the coding does not follow Apples guidelines and not if the whole concept is rejected.?