Can you anyone point me to specific books or maybe give me a quick overview of how architectures of data-driven iPhone applications look like? For example, let's say you're implementing an application that searches online shopping sites and gives you recommendations..etc. Is it a common pattern to establish a hosted back-end of webservices which does all the database/shopping site API connections/webservices work and have the iPhone app consume services on this backend? or do you put everything in the iPhone application? Also, if you are establshing a web-services back-end, is it better to use REST/JSON vs REST/XML vs SOAP/XML...etc?
Thanks
To answer the first part of your question, I'd say that's up to you. If there's a lot of processing that needs doing between the web service and the iPhone, then maybe you should have your own backend server doing that processing before sending it to the iPhone. However, if you just need the data from the web service as-is on the iPhone, then just consume it directly.
As for the different formats, with the iPhone smaller is always better when it comes to network traffic. Stick with using REST for sure so you minimize data that needs to be transferred from the iPhone. As for JSON vs XML, obviously JSON is more lightweight which makes it a better candidate for the iPhone generally, but if your data requires a representation more complex than JSON can offer, then go with XML. Don't do SOAP if you can at all avoid it. It's just too heavyweight and will drain the iPhone's battery much more quickly with many requests.
If you are curious about the architecture and implementation details of a data-driven iPhone app, take a look at all of Apple's docs and tutorials about Core Data on the iPhone.
Related
I am keen to get some apps built that can communicate with other devices/ web etc. i have played around with FTP and can get so far. But what is the best way to do this? We don't have any Servers with databases etc, but do have a site that we are currently uploading and downloading files to.
can anyone suggest a good/ better way to get the device to send/ receive files?
thanks
sam
If it's HTTP communication you're wanting to do, the simplest and most powerful tool is ASIHTTPRequest.
HTTP is the protocol your web browser uses to talk to web servers. If you have a site you're storing and downloading files at, it's almost certainly HTTP you're talking to it.
For iOS device to device communication one can use Bump API.
EDIT: I don't know of a generic framework for device <-> server communications, but having built applications that use web services of other providers like Yelp, Yahoo, Google Maps, I would say the way to go for this is to have REST based web services which exchange data in JSON format.
I want to make an iPhone app and an application (server) which runs on a PC with Windows. Is there any easy way to do this on the client side (the iPhone), like a library or something?
Looking on Google I found cocoaasyncsocket and xmppframework, but the last commits were done some time ago and before I start my project I want to know if there are other (better) possibilities out there
One option would be to run a web server on the PC, with a set of REST-based services. This approach gives you lots of options for implementation on the server-side, and you'll have lots of possible frameworks to choose from on the client-side as well. One framework you could use on the iPhone is ASIHTTPRequest.
There are lots of advantages to using a web-based approach. There are HTTP frameworks built for almost every device and platform, so if you ever want to interact with the server from the web, an Android device, etc., there will be many tools to help you do that. There are also lots of great tools out there for debugging HTTP interactions.
You could also use a SOAP-based API, but in my opinion SOAP tends to be more complicated than its worth.
I am a new programmer who is new to iPhone development and server stuff. I have a lot of questions to ask.
You don't have to answer all the questions; any help is appreciated!
How does iPhone apps interact with server?
Is there a particular kind of server i should use to interact iphone app with server?
If there is no particular kind of server then what kind of server can be used?
What are their advantages and disadvantages?
What should the iPhone app (which is the client) do in order to interact with the server?
How does the server know which iPhone to send data to?
What should the server do in order to interact with iPhone app (client)?
Your best bet is to have your iPhone make web requests of a web server. Your iPhone app acts just like a web browser, making http requests to a web server, and parsing the response.
I'm building an app right now that hits PHP scripts I've written that do database work, etc, and return JSON objects. It's not fancy--I could have built a whole SOAP or RPC web service, but I didn't do that, it just makes GET requests with query-string arguments.
There are handy libraries you want to know about. Google "iPhone JSON" to find the JSON library written by Stig Brautaset, that's the one most people seem to be using. Also, rather than putting yourself through all the hoops that the iPhone's built-in web client framework requires, go get ASIHTTPRequest, a very powerful and MUCH simplified web client library.
As a general rule, you want to do as much processing on the server as possible. For instance, there's a place in my app I'm searching for events happening within a user-specified range of their local coordinates ("within 10 miles of me"). I wrote PHP to build a latitude/longitude bounding box, and query from the database based on that. That's WAY faster than bringing a bunch of events down and then asking Core Location to calculate their distance from where I'm standing.
You've asked quite a few questions so I'll try my best to answer them all:
First, you need to be a bit clearer, what type of server are you talking about? Email server, web server, lolcat server, it depends.
At the basic level, the iphone communicates over the internet. The internet uses Internet Protocol, and there are two standard protocols built atop of IP: Transmission Control Protocol, and User Datagram Protocol. Each has it's own uses and functions.
TCP/IP and UDP/IP make up the backbone of internet communication.
A more specific application protocol is built atop of these two internet protocols, with a specific format to a given application. For example, HTTP is the standard protocol for transferring HTML and other Web information between a web server to a web browser client, over TCP.
So, your iPhone would use whatever protocol is required to commuincate with the server. For more common server communication, the iOS SDK provides methods to construct messages (for example if you wish to make an HTTP request to a web server, you can use initWithContentsOfURL to send a GET request).
If you built a custom server, then you will need construct the required message protocol on the iphone, and send it to the server, using either TCP or UDP (whatever your custom server expects).
Aplogies for the ignorant question, I have no experience with app development on any mobile platform. Basically what I want to know is what communication protocols do apps typically use for accessing/querying centralised services? E.g if I port a webapp/service to iPhone/Android, typically how would I access/query this web service in my app? E.g is it over HTTP, or are there other protocols?
Also, presumably the GUI of an app is constructed with Apple/Android GUI libraries (in java? cocoa?). Can an app GUI be defined with HTML/javascript like a webpage?
Sorry again for the pure noob questions.
Thanks
Your question is pretty broad as you can really implement it however you want, but in my own experience the majority of "centralized" services are accessed directly over HTTP using an HTTP networking library or NSURLConnection. Most of the web services I work with are RESTful. Some people might implement with straight sockets, but that's just pain and would be best avoided if possible.
The GUI side is done using Cocoa Touch on the iPhone. I'm not sure about Android. You can certainly implement a web based app targeted specifically for iPhone. In fact there's been a lot in the news lately about developing HTML5 apps for the iPhone and iPad.
I'm thinking about using semantic (web) technologies like RDF and OWL in an application on mobile devices. Currently I'm targeting android, but I'd also be interested in the possibilities on the iPhone and on J2ME.
I would like to use a library instead of implementing everything from scratch.
I know that there are some libraries/frameworks like Jena, Redland, Protégé but they don't state on which platforms they are known to work.
Having a dynamic object model and parsing from and to XML are must-haves for me.
I'd also like to use reasoning, but I've been told it was rather computing-intensive, so that's only a nice-to-have.
For all platforms mentioned, the question can be interpreted as
Is it possible in theory? (especially for J2ME I'm not sure)
Are there libraries that are known to work on those platforms?
Is the performance on a mobile platform good enough for real world usage?
You wrote you want J2ME, but other readers might be interested in C#.
Mono makes C# available on iPhone and Android. Once that is done, you can use ROWLEX to deal with RDF and OWL. You might consider reading this Stackoverflow question.
Maybe look into IYOUIT. It is a
mobile application developed in
Python, and running on Nokia Series 60
phones.
It uses OWL and reasoning. You can read the details in this paper.
There's Jena port to Android platform here.
http://code.google.com/p/androjena/
If this is a client-server type application and you have some control over the server, I would do the semantic web stuff server-side, and hand the relevant information to your view client on the mobile device.
A more general answer to your question title is Mosembro, a browser for Android that utilizes Microformats for semantic data. It doesn't do any non-trivial computations with the data, however.
if you have no limit as to use a certain framework, you can use REST api to handle server-client interactions.
more information here.