iphone XCode-Wifi connection - iphone

I am a beginner in iPhone development. I have a single static IP server in my company. I have one web service on that server which gets data from an intranet MSSQL server. I would like to get that data over WiFi to an iPad app, but only over our intranet.
Have any useful links or a sample project? I am using XCode 3.2.6.

It sounds like this is a simple web service consumption scenario, so I would start with consuming it using JSON as the transfer data format and using NSUrlRequest.
Here is an article that walks you through everything you need to know in almost painful detail. It should get you where you wish to go.

Related

iOS Device communication

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.

How does iphone apps interact with server?

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).

DB to run on OS X server that will sync nicely with Core Data on iOS?

I am trying to plan out a few iOS/server apps for internal use. On the iOS side I'll use Core Data, but I'm not so sure what many people do on the server side. I will be running a Mac Mini with OS X Server 10.6.X. This app will need to sync when the iOS device is on the internal WiFi as well as over 3G. Some of this data will need to be accessed by the company's external web site which is written in PHP, as well as by native apps on iMacs internally. Should I just use a MySQL db on the server, and expose a web service, or is there a better way by using Core Data on the server that would make syncing the iOS device easier? The data is not too relationally complex. I'm thinking tblClient 1->M tblJob 1->M tblImage/Drawing.
In most cases, the server side doesn't matter because your communicating with URLs and some standard data format like JSON.
You can connect to a remote Core Data store but it doesn't handle multiple access so there's seldom much point to doing so. You could write your own server that uses Core Data but usually its quicker and easier to use a preexisting package dedicated to server work.
My advice is to go with the server that is quickest and easiest for you to implement and maintain with the knowledge and tools you have on hand. It's easier to adapt the client side Core Data to inputs from the server than it is to attempt to integrate Core Data directly into the server.

How do I write a desktop application that syncs with the iPhone?

For example, how would I write a program like senuti? Are there any libraries I can use for this? It would be ideal if I could do this in Python or .Net, but I'm open to other things as well.
There are three things you can do:
Add some code to your iPhone application which acts as some kind of server (http, SMB, etc). Then your mac/windows full client application can connect to this server over wifi. This is safe and reliable, but unfortunately the app will have to be running on the iPhone at the time of sync.
Sync to the "cloud". EG: Have your iPhone app save some data to a web server on the internet (you could use amazon EC2, windows Azure, or even just a PHP script running on a cheap hosting account), and then have your windows/mac client also connect to this web server to retrieve the data. This is the most user-friendly, but it requires you to pay for the hosting of the web server, and will be unsuitable for large amounts of data
Violate the EULA and try to reverse engineer the way iTunes communicates with the iPhone.
This is how senuti works, but I wouldn't recommend it, as they're constantly having to play catchup with apple changing the format underneath them, and they are probably exposed to some kind of legal action, if apple ever bothered to sue them.
i believe Version 3.0 will resolve this as it allows you to program apps to the USB interface. check out some of the documentation for that in the External Accessory framework.
it would still require the app to be open, so essentially would mean two syncs (or more if you have multiple apps)
There is no legal / official way of doing this. Creating a program that would sync with an iPhone would violate the EULA you agree to when using the iPhone and iTunes.
Not only is it illegal, but it's also impossible to do this reliably. Apple could break the method at any time without any notice, and it would pretty much be a cat-and-mouse game.
I only know of one application that something of the kind, and it is the iToner application which synchronizes ringtones.

iPhone application architectures

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.