The default sms client for th e iphone is limited to 1000 messages, when you get beyond that it will stop receiving messages until you delete some. While it would be easy to rewrite this client, you can also get and save your old sms messages for later without having to replace the sms app itself. There are a few ways to do this, for me it was easier to get a copy of the sms.db from the iphone itself and then just throw it at sqlite - here's my recipe - hopefully this is useful for you: 1) open a terminal window on your iphone 2) type "find ./ -name sms.db" - for me this shows up at //private/var/root/Library/SMS/sms.db 3) copy that file to your computer 4) download and install sqlite 5) run sqlite3 over the database with "sqlite3 sms.db" 6) get a list of all tables by typing ".tables" 7) get a dump of the message table schema with ".schema message" 8) try "select flags,message from message" to see all messages... 9) try "select flags,message where address = '14034154856';" for example to see smses from me. 10) now lets just run it non interactively to generate our desired results; quit sqlite3, and from the shell just type something like "./sqlite3.exe sms.db "select flags,message where address = '14152154856'; " >mycopy.txt To elaborate - here is a bit of script that does it... note you might want a regex match on that phone number.
#!/usr/local/bin/ruby puts <ChatBubble END require 'rubygems' require 'sqlite3' db = SQLite3::Database.new("anselm_sms_2007.db") rows = db.execute "select * from message" rows.each do |row| if row[1] == "14152154856" && row[4] == "3" puts < #{row[3]}
END end if row[1] = "14152154856" && row[4] == "2" puts < END end end - a#{row[3]}