FMTouch Reference

From FMWebschool Reference

Jump to: navigation, search

Contents


Wiki Editing Suggestions for this Page

  • When editing, please keep all items on this page. The goal is to make this a quick reference.

Documentation

Sample Files from FMWebschool

  • Getting Device Info - use this file to learn how to determine if FMTouch is running on the iPhone/iPad/iPod and get the unique device id while you're at it.
  • iPad Template v0.2 - use this file to learn how to set your layout resize settings to support iPad orientation changes.
  • Date Time Math v0.1 - use this file to learn how to use the date/time functions correctly and work with the FMTouch limitation of having to convert date/time fields to numbers before doing math on them.

Third Party Sample Files

Please feel free to add starter FMTouch related files to this area.

Syncing

Advanced Syncing Options

  • The process goes in this order – FMTouch first sends the deletes, then sends the updates, then inserts any records, and then synchronizes it all together.
    • How this works is it takes all the changes you've made to the data in FMTouch and sends it to the FileMaker solution. And then to get any data changes you've made to the FileMaker solution, it re-downloads all of the Filemaker data to FMTouch.
  • Selectors by default are all set to ON
    • Send New Records - turning this off will prevent any new records created in FMTouch from being sent to the FileMaker database. After the sync, any new records will be deleted from FMTouch.
    • Send Updates – turning this off allows you to prevent any edits from being sent from FMTouch during the sync. Once the sync is complete all data will revert to the current state of the FileMaker database.
    • Send Deletes - If this is turned off, any deleted records on FMTouch will reappear after the sync when they are downloaded from your main FileMaker database.
    • Get Latest Data - This option will clear all of the changes, clear all of the new records, updates, deletes and will redownload the data from your main FileMaker database.
    • If you keep "Get Latest Data" on and turn the other three options off - any changes made on the iPhone will never be sent to your FileMaker database.
    • Selector settings will be carried over between syncs.

Database Design Report

  • DDR file must be under 10MB
  • No records are included in the DDR, only the structure of the database holding them. FMTouch uses this data to recreate the layouts and data structure on your iPhone.
  • 90% of the DDR size is determined by the number of layouts and graphical objects on those layouts.
  • To minimize DDR size, make a clone of your file and remove layouts you won't be using. For additional minimization, delete any unnecessary scripts and tables from the cloned file.
  • Movie on creating DDR's: http://www.fmwebschool.com/movies/ddr_movie2/ddr_movie2.html
  • If you do not have FileMaker Advanced, FMWebschool has a free online service to generate DDR's. http://www.fmtouch.com/DDR

iPhone Simulator

  • FMTouch Simulator Builds http://fmwebschool.com/frm/index.php?topic=2788.0 (only available to Enterprise Developers and people who requested simulator access, must be logged-in into the forum to access)
  • you must have v3.2 or newer of the iPhone SDK installed to run this simulator version (download it from the Apple website).
  • How to Install
    • Make sure you have the iPhone SDK fully installed (requires a free iPhone Dev account)
    • Extract the data from the zip file, you will end up with a folder with a really long name (for example "ACF6D56E-A0C9-4D82-89C2-A682314C194C")
    • Use Finder to navigate into /Users/yourUser/Library/Application Support/iPhone Simulator/User/Applications/
    • Copy/paste the long named folder into the Applications folder of the iPhone Simulator
    • Start the simulator from /Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator (or restart it)
  • Important Notes
    • The simulator runs at your computer speed, operations such as DDR initialization and sync will be 3-10x faster
    • The simulator does not have a specific memory limit, large databases that cause memory related crashes on the iPhone might behave just fine on the simulator
    • The simulator FMTouch version has the "Dial" button enabled for phone numbers, obviously no dialing occurs and it returns a URL error message instead

Debugging FMTouch Apps using the Simulator

At times you can find helpful messages in the Console.app (Applications->Utilities) when things don't seem to work in FMTouch. 95% of the messages will be very cryptic but errors such as "Error: Cannot resolve function arg 0: 'Truncate'" can help when you are trying to debug your scripts. This error for example says that Truncate is not a supported calc engine function. Also the script step Comment will output the comment text to the console. Note that this only works on simulator builds, device builds suppress 99% of the errors.

iPhone Guidelines

  • Screen visible real estate is 375px x 320px (with status area) or 460px x 320 px (without status area)
  • Maximum object size is 1024x1024 px
  • Field Height for 17 pt font = 23px
  • Rounded Rectangle = 293px wide, 12 px from edge
  • Rounded Rectangle Height
    • 1 line = 37px
    • 2 lines = 74px
    • 3 lines = 111px
    • 4 lines = 148px
    • 5 lines = 185px
  • Fonts
    • Heading = Bold Helvetica 18pt
    • Field Contents (Edge to Edge) = Bold Helvetica 20pt
    • Field Contents (Form View) = Bold Helvetica 17pt
    • Field Label = Bold Helvetica 12pt
    • Checkbox/Radio Buttons = Normal Helvetica 23pt
  • Colors (R G B values)
    • Solid Body = 197 204 212
    • Section title, field label, radio button/checkbox fill = 76 86 108
    • Background Alternating rows = 213 222 229
    • Dark Border, dark line = 171 171 171
    • Dark Border, dark line = 217 217 217
    • Section Background = 255 255 255
    • Field Font = 0 0 0

iPad Guidelines

  • The iPad has a 1024 x 768 pixel screen.
  • The Apple Status Bar with the Signal Strength and Clock takes 20pixels.
  • The FMTouch Status Area takes 88 pixels.
  • When the FMTouch Status Area is Hidden
    • Portrait: 768 x 1004
    • Landscape: 1024 x 748
  • When the FMTouch Status Area is Visible
    • Portrait: 768 x 916
    • Landscape: 1024 x 660

Blackberry Guidelines

FMTouchBB currently supports the following models (with their respective screen sizes given as width x height in pixels).

  • 8100 series (Pearl) : 240x260
  • 8200 series (Pearl Flip) : 240x320
  • 8300 series (Curve), 8700 series and 8800 series : 320x240
  • 8900 Curve (aka Javelin): 480x360
  • 9000 (Bold): 480x320
  • 9500 series (Storm) : 360x480 (480x360 when held sideways).
  • 9600 series (Tour): 480x360

The Storm's input method is a Touch Screen, and it is capable of changing orientation (portrait/landscape). All the other models have a keyboard and Track Ball, and are not capable of changing orientation.

Layouts

  • Tab Order - Tab order is statically calculated left-to-right and then down. Just like the auto assign tab order in FM works. The actual FileMaker tab order is not in the DDR.

Calculations

  • All basic arithmetic operations and numeric values are well supported
  • Each literal string value in a calculation can contain a maximum of 1024 characters at this time. Use real FileMaker fields if you need longer strings in your calculations.
  • A limited subset of functions is currently supported, assume that a function is not supported unless it appears in the list of supported functions that is available in this guide.
  • Referencing repeating fields is not supported at this time, operations on repeating fields using functions can cause unpredictable results.
  • Summary fields are not supported at this time; the value you get is the value of the summary field at the time of the last sync.
  • Auto enter calculations work when referencing the same table; auto enter calculations that reference related tables will not function correctly.
  • Unstored calculations are not updated unless they are triggered somehow. There are triggers in place when fields that they depend on change, but currently no support for things like Get(FoundCount) to change when the found count changes. That being said, if you place it as part of a script it will work better.
  • Function names take priority over field names in calculations. For example, three fields named Month, Day, & Year will not be evaluated in the following calculation which will return (, )
    • Appointment = "(" & Month & " " & Day & ", " & Year & ")"
  • Any field name that has the same name as a function name should be wrapped in curly quotes prepended by a $ when used as part of a calc to make it an explicit field reference. Example syntax is ${Month}
  • Date and Time Math
    • Starting with version 1.63 of FMTouch it is possible to perform math on date/time/timestamp fields, however one extremely important step needs to be taken. You must use GetAsNumber on your field to convert it into its numeric form first, add/subtract your values (days for date fields or seconds time/timestamp fields). Consider this calculation field: “report_date + 7” (one week after the report date) which is set to have a calculation result type of Date. FMTouch will not be able to work with it unless you do this: “GetAsNumber(report_date) + 7”. Since you set the field type to return a Date, the result will be processed through GetAsDate() automatically. If your result seems odd, add the GetAsDate just in case like this: “GetAsDate( GetAsNumber(report_date) + 7 )”.
    • To calculate the difference between two date fields you must convert each one to a number like this: “GetAsNumber(date1) – GetAsNumber(date2)”.

Functions

  • Abs
  • Average (only when referencing related fields, self references will always return the current value)
  • Count (only when referencing related fields, self references will always return 1)
  • Date [v1.630]
  • Day [v1.630]
  • Evaluate
  • Get ( value ) (See the Get Functions section below)
  • GetAsDate [v1.630]
  • GetAsNumber
  • GetAsTime [v1.630]
  • GetAsTimestamp [v1.630]
  • GetNthRecord
  • GetValue (only when referencing related fields, self references will not work)
  • Hour [v1.630]
  • If
  • IsEmpty [v1.630]
  • Left
  • Length
  • List (Best used on string fields, when used on numeric fields it appends “.0” to many values)
  • Lower
  • Max (only when referencing related fields, self references will always return the current value)
  • Middle
  • Min (only when referencing related fields, self references will always return the current value)
  • Minute [v1.630]
  • Month [v1.630]
  • Pi [v1.630]
  • Position
  • Random
  • Right
  • Round
  • Seconds [v1.630]
  • Sqrt [v1.630]
  • Substitute (without the multiple replacement syntax of ["a" ; "b"])
  • Sum (only when referencing related fields, self references will always return the current value)
  • Time [v1.630]
  • TimeStamp [v1.630]
  • Trim
  • Upper
  • ValueCount
  • Year [v1.630]

Get Functions

  • Get ( CurrentDate ) [v1.630]
  • Get ( CurrentTime ) [v1.630]
  • Get ( CurrentTimestamp ) [v1.630]
  • Get ( FoundCount )
  • Get ( LastError )
  • Get ( LastMessageChoice )
  • Get ( LayoutName )
  • Get ( LayoutNumber )
  • Get ( RecordId)
  • Get ( RecordNumber )
  • Get ( ScriptParameter )
  • Get ( ScriptResult )
  • Extremely Important: Get(CurrentDate) and similar functions do not automatically update when you browse records. You must force their refresh using a script when needed.

Special Get Functions

  • Left( Get ( SystemPlatform ) ; 4 ): DeviceType will return: “iPhone1,2”,”ipodX,X”, “ipadX,X” (lower case), or “simulator”. The last numbers are generation numbers (1,1 original iPhone, 1,2 iPhone 3G, etc). Using the first 4 characters of the result will allow you to make good decisions on it.
  • Get ( SystemVersion ): OS Version will return iPhone OS data: for example 2.2.1, 3.0, 3.1.3
  • Get ( SystemNICAddress ): Device ID will return the device UUID = 40 character value, unique to each device. Same value as you used for the provisioning profile.
  • Evaluate("Get ( DeviceName )"): Device Name = Friendly name of the device (”Steve Job’s iPhone”. Easily changeable by user, do not rely on this for any kind of authentication.
  • Get ( ApplicationVersion ): App Version = Your app version as it is read from the Info.plist file. This allows you to detect when the app version changes from the stored version after a user upgrade.
  • VITAL NOTE: You must force an evaluation of these functions. They will not auto refresh themselves when the record is browsed. Startup scripts can be a good approach for evaluating these.

Special Functions

  • Evaluate("FMTouch_Sync") This function brings up the sync dialog, identical to clicking the sync button. The user is then required to select the connection method and sync. Keep in mind that this function runs the dialog AFTER the calculation completes, therefore if you use Get(FoundCount) or other such functions in the same calculation line they will reflect the old data.
  • Evaluate("FMTouch_Scan_Barcode") This function brings up the barcode scanning interface, currently experimental and will only scan photos from the iPhone 3GS – other iPhones do not have a camera powerful enough for barcode scanning. Keep in mind that this function runs the dialog AFTER the calculation completes, therefore if you use Get(FoundCount) or other such functions in the same calculation line they will reflect the old data. The function will return “OK” as its response. You must use Get(ScriptResult) on the next line to read the barcode (or an empty string if no barcode was scanned). For a barcode scanning example file please see these forum posts: http://fmwebschool.com/frm/index.php?topic=4590.0 or http://fmwebschool.com/frm/index.php?topic=4537.0
  • Evaluate("FMTouch_GPS_Activate") This function will enable the GPS subsystem for the app, and will bring up the “Allow application to use location services” prompt to the user. This function is needed if no fields in your app have gps in the name and you intend to use GPS functions from your scripts or calculations – if some fields have “gps” in the name then gps might already be enabled in the application. Calling this function multiple times is absolutely safe. It will take at least 5- 10 seconds after this function call to have valid GPS coordinates available for use. We recommend using a Set Variable script step in your “__FMWS_FMTouch_Open” script step to enable this function when the app starts.
  • Evaluate("FMTouch_GPS_Position") This function returns the GPS position in the notation of “latitude, longitude (+/- accuracy m)”, it is the same notation as the “Get Position” button in the regular gps fields. You must activate the GPS subsystem 5-10 seconds before using this function, otherwise an empty string will be returned.
  • Evaluate("FMTouch_GPS_Position_Values") This function returns the GPS position using a set of line break delimited values, you can use the GetValue function to retrieve any of the 6 values. You must activate the GPS subsystem 5-10 seconds before using this function, otherwise an empty string will be returned. The values returned are (in this order):
    • latitude, in decimal notation
    • longitude, in decimal notation
    • altitude, in decimal notation
    • horizontal accuracy, as an integer value representing +/- meters of accuracy
    • vertical accuracy, as an integer value representing +/- meters of accuracy
    • age of value, in minutes (0.2 would represent 0.2 minutes or 12 seconds ago)
  • Evaluate("MD5(fieldReference)") This function returns the MD5 sum of the field reference in question. Has relatively limited use, and should work with both text and container fields.

Special Scripts

  • There are a few specially named scripts that are run at different times in FMTouch if they exist. Specifically there is a script that runs when your database is opened, and when a layout is switched, both of those scripts have to be specially named for them to run.
  • “__FMWS_FMTouch_PreSync" This script will automatically run a script in your database before a sync. FMTouch waits for the scripts and all other running scripts to finish before continuing with the sync.
  • “__FMWS_FMTouch_PostSync” This script will automatically run a script in your database after a sync.
  • "__FMWS_FMTouch_Open" This script runs when the FMTouch database initially opens, it allows you to show/hide status area and do a number of other nice things.
  • "__FMWS_FMTouch_SwitchedLayout" This script runs when a layout is switched by the user, use Get(LayoutName) to figure out which layout it just switched to. This script does not run when you switch layouts from __FMWS_FMtouch_Open, or when you use Go to Layout. It is useful to detect when a user switches a layout using the layout switching mechanism at the top of the interface.

Script Steps

Only a handful of script steps are supported at this time.

Control

  • Perform Script
  • Exit Script
  • If
  • Else If
  • Else
  • End If
  • Loop
  • Exit Loop If
  • End Loop
  • Set Error Capture [v1.630] (only suppresses No Records Found dialog at this time)
  • Set Variable

Navigation

  • Go to Layout (except “by calculation”)
  • Go to Record
  • Go to Related Record (The record you are going to must be on the layout you are currently on. That means that at least one related field from the table occurrence that you are trying to go to must be on the layout, a set of related records displayed in a portal also satisfy this condition.)
  • Enter Find Mode

Fields

  • Set Field

Records

  • New Record
  • Delete Record

Found Sets

  • Perform Find (does not support a stored find, you must use set field to set the find fields)
  • Show All Records [v1.630]
  • Show Omitted Only [v1.630]
  • Omit Record [v1.630]

Files

  • Close File (closes DB, returns to list of files in FMTouch)

Windows

  • Close Window (closes DB, returns to list of files in FMTouch)
  • Show/Hide Status Area
  • View As (Only the setting “Table” or “Form” are working now, useful for switching into table view when the status area is hidden)

Open Menu Item

  • Open Preferences (Experimental, brings up the manage database dialog, will be useful for runtime copies of fmtouch)

Miscellaneous

  • Show Custom Dialog (without input fields, custom buttons do work)
  • Comment (does nothing)
  • Dial Phone
  • Open URL
  • Send Mail
  • Exit Application (closed DB, then exits FMTouch completely to the iPhone springboard)

Keyboard Type Selection

The iPhone contains a number of keyboard types that are available when editing a field. FMTouch attempts to automatically determine the best keyboard type for the user. Below is the algorithm that FMTouch uses for this determination:

  • FileMaker field is a number: a numbers/punctuation keyboard is used
  • "web"/"url" in the field name: a URL keyboard (with .com as one of the buttons) is used
  • "phone" in the field name: a phone keyboard is used
  • "email" in the field name: an email keyboard is used
  • all others: a standard iPhone keyboard is used

Auto Enter Serial Number Fields

  • Auto enter serial number sequence
    • FMTouch keeps its own sequence of numbers that are properly replaced during sync with the ones filemaker auto generates. That being said, currently this works correctly only when the related child record is created through a portal relationship.
    • When you sync, as long as you created a new child record using a portal it will fix the serial numbers during sync.
  • Key Fields / Auto Increment
    • If you plan to sync your App with a FileMaker database, you may want to set your auto increment to different values. One way is to prefix the key with something unique. Examples: 1.1, App_1, FM_1

Graphics

  • Graphics for the App Build
    • (1) App iPhone Icon (57x57px PNG)
    • (2) App iPad Icon (72x72px PNG)
    • (3) iTunes Icon (512x512px JPEG)
    • (4) iPhone Startup Screenshot (320x480px PNG)
    • (5) iPad Startup Screenshot Portrait (768x1004px PNG)
    • (6) iPad Startup Screenshot Landscape (1024x748px PNG)
  • Startup screenshot tip: Simulator builds auto-create a screenshot after 20 seconds of running. The screenshot is placed in the Documents folder of the app in the Simulator app package. We suggest that you start your app in portrait, get it to the proper startup position within 20 seconds, then find the PNG image in the documents folder. Shutdown the app, then repeat in lanscape mode.
  • Icons: Create your icons without the curved edges and without the glass effect. Save at 57x57 pixels and also at 512x512 pixels. Both should be square and not scaled up or down. Your images will be automatically curved and glassified. :)
  • Graphics for iPhone/iPodTouch App Submission
    • (1) Small Icon: 57px square; 72 ppi, RGB, flattened and no transparency; 24bit PNG image file format
    • (2) Large Icon: 512px square, 72ppi, RGB, flattened and no transparency; high quality jpeg or tiff image file format. PNG images will not be accepted.
    • (3) Primary Screenshot: portrait mode = 320x460px (min) up to 320x480px (max); or landscape mode = 480x300px (min) up to 480x320px (max); 72ppi, RGB, flattened and no transparency; high quality jpeg or tiff image file format; do not include the iPhone status bar. PNG images will not be accepted.
    • (4) Up to 4 additional screenshots (optional). Same requirements as above. Pick the best screens to show off your app.
  • Images uploaded for screenshots: On upload, if selected in reverse order (the last one to show then the next to last one to show, etc.) they show up in the proper order on the iTunes store.

iPhone4 and iPad Guidelines, Updated Icon Info

Take a look at a great article here (and a great Photoshop template) for all the icon info. Currently FMTouch Enterprise system will allow you to specify the 3 different app icons and the large iTunes icon:

http://globalmoxie.com/blog/designing-for-iphone4-retina-display.shtml

App Submission Tips

  • To submit your App you need to have the following: “Application binary (includes 57px icon), large 512px icon for use on the App Store, primary screenshot, contract information, export compliance information and application metadata. Optional items to prepare include, additional screenshots, localized metadata for the sale of your application in other countries, and promotional graphics.”
  • App
    • Support Button: Create a button in your app that performs an Open URL to your website for support. Make this page be specifically for your iPhone app(s).
  • Website
    • iPhone App Support Page
      • Create a web page for support that links from your iPhone App.
      • Ask users to register so you can send them product update information.
      • Create a link to your product page.
      • Create a link so customers can email you for support.
      • Include links so customers can follow you on your blog, twitter, or other services.
    • iPhone App Product Page
      • Include a similar description as the iTunes submission.
      • Include screenshots of your app.
  • iTunes Submission Form
    • Application Name - Limit is 255 characters, but only 12 or 13 characters will show under the icon.
    • Application Description - you are allowed 4000 characters (this is the description you see on the left side of the app in the App Store). For best results on the application product page, it is recommend to limit it to 700 characters. This field should be used to describe the features and functionality of your application. (You may want to make reference to the App language "English". See countries available below.)
    • Countries or App Stores available- if you select all stores, Apple will default the following under languages "English, French, German, Spanish, Swedish"
      • The countries that use English are: Australia, Belgium, Canada, Denmark, Finland, Greece, Ireland, Luxembourg, New Zealand, Norway, United States, and United Kingdom
    • Category You get to pick 2 categories for your app, a primary and a secondary. These can't be changed. Note: selecting "Game" will give you an additional list of categories. (Book, Business, Education, Entertainment, Finance, Games, Healthcare & Fitness, Lifestyle, Medical, Music, Navigation, News, Photography, Productivity, Reference, Shopping, Social Networking, Sports, Travel, Utilities, Weather)
    • Device Requirements - Make reference to iPhone or iPod Touch, if your app requires gps, then don't put down that it is compatible with touch or make a reference that the phone field will not dial the phone if used in iPod touch
    • Rating - Answering the questions provided will rate your application
    • SKU Number – You are free to create any string of UTF-8 letters and numbers, as long as it is unique to your developer account. It is not editable under any circumstance after submitting your metadata.
    • Encryption - checking "yes" to this question will require additional info (someone who has done this should provide details)
    • Search keywords - Come up with a list of search key words associated with your app, you are allowed 100 characters in total.
    • Application URL (optional) the website for users to get more information about the application.
    • Support URL (required) the support website you would like to provide for users that have questions regarding the application. This will appear on the application product page on the App Store. Your Support URL must lead to actual contact information for support so that your customers have the ability to contact you regarding app issues, general feedback or feature enhancement requests
    • Support Email Address (required) an email address where Apple can contact you if there are problems with your application. This will not be seen by the customer.
  • Approval Time
    • This is an unknown , my app took 8 business days, speaking to another developer, his app took 2 weeks, others can post there time
  • Revisions
    • Submitting an update for your app requires a new binary with a change in the version number. You will be asked about encryption and will need to upload the files again. It will go through a review and will take just as long as the original submission. You will be asked "What changes were made"

Application Provisioning

  • Application Provisioning for the iPhone is a process through which Apple ensures that only specific approved applications are allowed to run on its devices.
  • There are two official ways to get an application running on an iPhone/iPod Touch device: adhoc installation and app store distribution. App Store distribution is handled by Apple, while AdHoc installation requires you as the developer to construct a list of devices on which you intend to allow the app to run. The list of devices can only contain 100 unique device ids, only those devices will be able to run your application without it being purchased on the app store.
  • Obtaining device ids: Users have to click on the serial number field in iTunes when their iPhone is connected and it turns into the 40 character alphanumeric serial number. Video demo: http://fmwebschool.com/movies/retrieveid/retrieveid.html
  • Provisioning Main Action Steps
    • 1. Make sure you have a fully working Apple Developer account.
    • 2. Use the "Developer Certificate Details" to create a certificate with the proper name for your Apple account.
    • 3. Go through the Apple Provisioning Wizard in the Apple program portal (iPhone Developer Program Portal http://developer.apple.com/iphone/manage/overview/index.action); download the CSR (Certificate Signing Request) file generated.
    • 4. Download the resultant Provisioning Profile from the Apple program portal.
    • 5. (Optional, must be done before final distribution). Generate all 3 types of provisioning profiles in the Program Portal. (Development Profile, AdHoc Distribution Profile, App Store Distribution Profile).
  • You must use the CSR that you generate from the FMTouch site to create both a development and a distribution certificate in the Apple Program Portal
  • “The Development Provisioning Assistant cannot be used to create a Distribution Provisioning Profile. Use the Provisioning section of the Program Portal to create a Distribution Provisioning Profile required for distribution to customers on the App Store.”
  • All of the mobile provisioning files should be using the same key/certificate. If it isn't the case, create a new pair of keys/csrs and go through the process again. Then make sure ALL of the provisioning profiles are based on the same certificates which in turns should be made from the same CSR file. Once that is done you should have 3 provisioning profiles all saying that the key test was passed.

List View

  • Use a Portal: A portal from a self-join X relationship can be used to generate a list view. To sort, the sort must be on the portal relationship, not on the portal itself. FMTouch currently only supports sorting on a relationship. Just go into the relationship graph and add the sort settings to the self-join itself.

Table View

  • Column Order: To reorder the columns, in your FM file send to the back the last field, then the second to last, etc. The field in the front will be the first column in the table.
  • Currently there is no way to exclude a field from table view - other than having more than 20 fields and sending the excluded fields closer to the front. Then by default they would be gone from table view.

Webviewer

  • Webviewer Integration: In this version the web viewer is experimental - it works, but might cause FMTouch to quit when changing layouts.
  • MapQuest calculation for the webviewer: open mapquest.com on your iphone and then enter your address. Copy the url of your map and use it as a template to build the new calculation for your web viewer. The new viewer will not display on the desktop, but works from the phone. Another option is to use the Google Maps built into the iphone, but this requires the user to close the app.

Barcode Scanning

  • Barcode scanning will only reliably work on the iPhone 3GS since it includes auto focus which is needed to focus on the barcode. You can still test with the iPhone 3G but keep in mind that the focus must be absolutely perfect for it to work with its camera. The basic idea is you use the Evaluate("FMTouch_Scan_Barcode") function in a Set Variable script step, it does not return a value however just a simple "OK". Then the next script step can do Get(ScriptResult) to get the actual barcode that got scanned.
  • Barcode Scanning - Info and Sample Files http://fmwebschool.com/frm/index.php?topic=4590.0

Containers

  • Container Field Support
    • Insert Signature: Tap the container field into which you would like to add a signature. Select "Insert Signature" from the menu. A blank screen will appear. Simply use your fingertip and begin writing.
    • Screenshot: To take a screenshot you will need to press the circular button at the base of the iPhone and the power button at the top of the iPhone simultaneously. This will save the image to your "photo albums".
    • Web Image: First launch your browser on your iPhone. Once the page loads, take your finger and place it on the image that you want to add to your database. You may have to hold it on the image for a few seconds.
    • Voice Recording: You can now record up to 3 minutes and save it into your container field. Simply touch the field for the option menu and select the “Play/Record Sound" option.
  • Known Bug: If on your desktop Filemaker you have a container field in a tab - syncing might not work for that field if the tab is not active. The simple solution is to put any container fields that are in a tab in a 1x1 px box on the main part of the layout (and keep another copy in the tab). This must be done only on the desktop, in FMTouch things will continue to function just fine. This should be done on any layout in FileMaker that might have this issue, as the container sync script can choose any of the layouts that include the container field for the container sync. Thanks to Serge Gagon/Maniko for the very detailed report. Also this only affects container fields that are being pushed back from FMTouch to FileMaker Pro.

App Speed

  • What affects layout loading speed
    • The number of layout objects, images, etc.
    • Each time you switch layouts FMTouch breaks down the user interface objects and recreates them from scratch….then the iPhone operating system has to take these new objects and convert them into actual visual elements
    • When images of any kind are involved, those images have to be decompressed and displayed
    • Avoid images whenever possible
    • Shapes are quite efficient to draw, they can be good alternatives
    • Using multiple layouts instead of huge sets of tabs with many subfields within each tab is preferable for speed
    • Loading 1 large JPEG image may be faster then loading 10-20 tiny images
    • Images on the layout will be MUCH faster typically then images from container fields
    • Recommend JPEG as the format to use.

Marketing

  • Twitter
    • Create a separate account if needed, build a list of followers specific to the industry or target audience and follow as many individuals or businesses in this industry, hopefully you will get a percentage following you.
  • Facebook
  • Press Release
  • Industry Shows
  • Word of Mouth
    • Promote the app to all your friends, colleagues, family and anyone who will listen.
  • Notes from Stephen Knight: A couple important things to remember. Competition on the iTunes store is huge there are thousands and thousands of competing applications out there now. What does that mean to you?
    • People get into buying grooves - make sure your application looks stellar - nice vibrant images - make sure it stands out
    • Use keywords for your industry and let other FileMaker developers see what you are doing - many are buying apps just out of curiosity to see what other developers are doing
    • Make sure you list benefits. So many people instantly get caught up selling what their product can do - remember to talk about how your product will be beneficial for your customers
    • Use this opportunity to push people to your website and sell a larger ticket priced item and to get email addresses
    • If you have an iTunes app online - create a desktop application that does more and can sync with your app

Pricing Your App

Some interesting links on pricing

http://www.macworld.com/article/143627/2009/11/paid_apps.html?lsrc=rss_news

http://www.networkworld.com/community/node/38804

Version History

Please note that this version history includes developer versions that are currently available to beta testers and FMTouch users. The publically available iTunes version of FMTouch is typically a couple of versions behind this list.


  • v1.668 Updates:
    • Added basic printing support, the Print script step brings up the iOS printing dialog now.
    • Greatly improved the quality of the PDF that gets attached to an email.
    • Added basic support for the Print Setup script step. There is no print setup dialog in FMTouch but the page size and orientation settings that you store within the script step will be respected. There is no support for page margins at this time.
  • v1.661 Updates:
    • Added support for Delete Portal Row script step when it is called as part of a script triggered by a button on a portal row.
  • v1.660 Updates:
    • Added limited go to field script step support
    • Allows to play audio using go to field
    • Barcode scanning is currently works with a manual "photo take" only, auto scanning will return shortly (new Apple TOS limitations)
    • Fixed drop down focus issues when activating them or trying to override the value list with your own custom value
    • Added support for "=" and "==" operators (both work as an exact field content match at this time)
    • A number of other stability fixes and internal improvements
  • v1.650 Updates:
    • No updates, submitted for review to Apple as v1.65, functionally identical to 1.642
  • v1.642 Updates:
    • Greatly improved scrolling of fields into view when they are activated
    • Improved support for external keyboards
    • Some stability fixes
  • v1.630 Updates:
    • Date/time calculations are now partially supported! (you MUST see the updated calc guide and sample file for details in order for it to work)
    • Added support for QRCode barcodes
    • Barcode scanning is dramatically faster
    • Buttons can now have rounded corners
    • Fixed calc engine bug where field names such as Last, Length, etc would cause problems when they were the same as function names
    • Multiple to and cc addresses in Send Mail now properly work when separated by a comma
    • Sort order in a relationship is now case insensitive to match how FM sorts data
    • New calc engine functions: IsEmpty, Pi, and a few other minor ones
    • Fixed a bug with parsing some calculations what have table occurrence references in them with spaces in the table occurrence name
    • Added support for Set Error Capture, currently it only prevents the no records found dialog
    • Signature drawing now crops itself around the drawn area instead of taking an image of the whole screen with all the white area


  • v1.622 Updates:
    • Added support for Omit Record (in browse mode only, not in Find Mode), Show Omitted Only, and Show All Records
    • Improved support for scripts running from portal rows
    • Fixed a few bugs with sync initiated from within the app
  • v1.620 Updates:
    • iPad improvements (better layout picker, better value list picker)
    • Date/Time Formatting!
  • v1.615 Updates:
    • App store release (marked as 1.62 on the App Store), identical to v1.610
  • v1.610 Updates:
    • Stabilized iPad and iPhone resizing code
    • Fixed freezing of some databases on "Loading" that was introduced in a few recent versions
    • Clicking the Done button during an active sync now tells you that the sync is in progress and cannot be aborted. The user is told of the option to exit the app to abort the sync.
  • v1.578 Updates (Simulator build only):
    • Fixed auto resize problems with webviewer, some text labels
    • DDR parsing speed is 15-20% faster now (this only affects the first DDR load/parse, not the much faster subsequent loads)
  • v1.577 Updates (Simulator build only):
    • Fixed auto resize problems with buttons, styled text labels
    • Clicking Send Email with an auto detected email address will now bring up the new email message without exiting FMTouch if you have iPhone OS 3.0+ installed
    • Added an updated iPad template to the bottom of this post
  • v1.576 Updates (Simulator build only):
    • iPad Support! This version will start in iPad mode when used in iPad simulator from SDK 3.2 Beta 5, and in regular mode when you force the simulator into a lower iPhone OS version when using the hardware menu (use this to test device based layout selectors)
    • Added native email client integration when using Send Mail, no more SMTP setup for the end user (requires iPhone OS 3.0+)
    • Tabbing through repeating fields works properly now.
    • Field autoresize support when switching orientations. This is highly experimental right now and is still being worked on. A couple of important notes to keep in mind: autoresizing fields within portal rows are is not fully supported (will be in the next 1-2 days), vertical stretching of a portal is supported to show more rows. Auto resizing repeating fields are not supported at all for now, attempting to resize them will produce graphical glitches. I will be posting a very rough iPad template shortly for everyone to design with.
    • This build now allows you to start developing your iPad apps in order to submit a couple by Mar 27th (if you're an FMTouch Enterprise user)! We will have iPad enabled device builds in the next 24 hours. That being said, make sure to test how your app runs in both 3.0 and 3.2 versions of the simulator to see iPhone/iPad differences
    • The iPad support is pretty basic when it comes to the rest of the FMTouch UI for now (sync screen, db list, etc are not using the new screen real estate effectively). This build is mainly designed for FMTouch Enterprise users that want to start developing iPad compatible DDRs and won't be using the native FMTouch screens as much.
    • Edit: An iPad Template file is attached to this post. It demonstrates the basic dimensions for iPad design as well as ideas of how to structure your apps. It also shows a few bugs with the resizing that are being fixed tomorrow. Download the template and the simulator v1.576 build and enjoy the magic!
  • v1.574 Updates:
    • Tabs now have proper rounded corners
    • Value lists that are based on Number fields now sort numerically ("53" is now in front of "143")
    • Fixed a bug where during an update some data might be cleared (introduced in v1.573)
    • Slight speed improvements during initial database load (roughly a 0.1-0.2 sec improvement for each MB of DDR)
    • PDF Exports in emails are now more reliable and should have slightly better quality
    • Other small bug fixes
  • v1.573 Updates:
    • Fixes an installation bug with the latest provisioning profile
    • Improves support for portal options such as Allow Delete
    • Better support for Set Field when it is ran from a button within a portal row
    • Tooltips now show up in a field using the gray text when the field is empty (Allows to save space with labels)
    • Many other small bug fixes
  • v1.540 Updates:
    • Portals now properly render just the needed rows with data, not all rows will have graphical objects and buttons
    • Portals respect the "allow deleting rows" portal option
    • Portals respect the creation of child records as part of a table occurrence setting, not all portals now have empty portal rows
    • Added back the encryption options, they were accidentally removed a couple of builds ago
    • Barcode scanning now requires v3.1 of the iPhone OS to run due to new Apple SDK restrictions
    • Fixed a bug with updating records during sync with new container fields, sometimes the container field would not transfer from the iPhone to FileMaker
    • Fixed a couple of web viewer bugs
    • KNOWN ISSUE: Horizontal application lock does not fully work in this build, will be addressed in an upcoming build
  • v1.530 Updates:
    • Fixed crashes with web viewers when changing orientation
    • Fixed a sync failed condition triggered occasionally by specific container fields
    • Global fields are now properly populated with the global value for new records
    • Changed some wording on the USB required message to avoid referencing Apple
    • Added notification to the web viewer if it fails loading letting the user know that an internet connection is required for the web viewer
    • Fixed minor problem with the random function not properly reseeding
    • Other minor fixes
  • v1.520 Updates:
    • Fixed server sync plugin requirement, server sync now requires just version 1.72 of the server sync plugin
  • v1.510 Updates:
    • Requires the new updated 1.82 sync plugin
    • Fixed a number of bugs
    • Added support for GPS functions, see the updated calc guide for documentation
    • Added support for the Random function
    • Added support for Get (RecordNumber) and Get(RecordId) functions
  • v1.50 Updates: (current App Store release):
    • Fixes a critical loading bug on some cases which causes the loading screen to continue indefinitely.
    • Fixes an occasional crash when layouts with web viewers are switched away from while the web viewer is loading.
    • No changes in UI or features.
  • v1.490 Updates:
    • DDR parsing and loading should be about 20% faster (initial first time loading only)
    • Fixed a bug where the Middle calculation function would cause an occasional crash
    • Entering a related field on a layout with no related record now attempts to create a related record (as if entering the first portal row)
    • Fixed a value list crash where exiting a value list that is attached to a multi line field
    • Fixed a crash when using the Open URL auto detection button with a field that has a URL in it (bug introduced in the last build)
    • The Send Email script step now properly transforms new lines in text into proper line breaks for the HTML portion of the email
    • A couple of other small bugs and visual glitches fixed
  • v1.484 Updates:
    • Slightly improved sync when connecting using server sync
    • A couple of small bug fixes
    • First time DDR loading after updates now has a message that it may take 1-2 minutes
  • v1.480 Updates:
    • Added beta support for Barcode Scanning (see barcode scanning post for more details)
    • Waits for opening script to finish before displaying the first layout (this avoids the visual glitch of the full interface if you are trying to hide it)
    • Fixed a number of crashes
    • Added support for the Round calculation function
    • Added support for Perform Find (note: no stored find is performed, you must use "Enter Find Mode", a number of Set Field commands, and then "Perform Find" for a find to work)
  • v1.474 Updates:
    • Fixed problem with record not staying when switching layouts of the same
    • Added support for Comment script step (does not do any action)
    • Fixed crash when using "Close File / Close Window" script step in some cases
  • v1.471 Updates:
    • Disabled a few things to try and resolve wifi connection dropping problems, please test if you had this issue
    • Added support for "Close File" script step (identical to Close Window in functionality)
    • Will always say "wi-fi not available" during the sync at this time, this is normal for this build but might fix the connection dropping issue
  • v1.47.0 Updates:
    • Greatly improved stability of some application areas
    • Added support for syncing embedded containers back into the database (need new plugin and import of latest sync helper script from our sample files)
    • Added support for many new features (to be documented on Monday July 6th)
    • Added opening script support through a magically named "__FMWS_FMTouch_Open" script
    • Added support for a magically named "__FMWS_FMTouch_SwitchedLayout" script, use Get(LayoutName) to figure out which layout it switched to
    • Added support for Show/Hide Status Area
    • Added support for View As

(to switch to table view in a script)

    • Long URLs are now better formatted/truncated in the auto detection open url button
    • Added the ability to use new line separated values in value lists that are based on a table
    • All date/time/timestamp fields now bring up the iPhone selectors (no need for specifying them as "Popup Calendar"), also now the selectors include a "Now" button
    • Known issue: switching layouts that have the same table occurrence resets the current record number, getting fixed in the next build
  • v1.45.0 Updates:
    • Added support for server sync using the web publishing sync method (see the server sync post for details)
    • Removed ODBC sync support for now, future of this feature is unclear
  • v1.44.0 Updates
    • Toolbar with Next/Prev/Dial buttons is now properly visible in horizontal mode
    • Fixed crash when using table based value lists
    • Fixed crash with portal row deletion
    • Fixed a number of rare crashes when creating and duplicating new records
    • Fixed a number of other minor bugs
  • 1.42.0 Updates:
    • Fixed disappearing keyboard issue
    • Compatible with v3.0 of iPhone OS
    • Field tabbing within tab interfaces properly works now
    • Field tabbing in portals is improved (tabbing now stays on the same portal row, when last field reached on any row it tabs out of the portal, this is a known issue)
    • Improved phone number and email detection (partial non-phone numbers before the actual phone number do not cause it to not see phone number anymore)
    • Go to Record now supports "By Calculation" option
  • 1.40.0 Updates (Official App Store Release)
    • Value lists are now sorted even if no default sort is set (this is how FM behaves)
  • 1.38.6 Updates (v1.40 App Store Release Candidate 3):
    • Added support for Show Custom Dialog properly returning a Get (LastMessageChoice) based on the user choice, no plan to integrate the custom text inputs for Show Custom Dialog at this time
    • this is likely the last feature addition/fix before the release
  • 1.38.5 Updates (v1.40 App Store Release Candidate 2):
    • Fixed crash with sound recording after recording a new sound
    • Signature capture now works, also its done/cancel buttons are now reversed
  • 1.38.4 Updates (v1.40 App Store Release Candidate 1):
    • Self joins now properly work
    • Fixed crashing bug when initializing DDRs with certain tab controls (bug introduced in 1.38.2)
    • Sync plugin v1.60 is now required, this is to bring everyone up to the latest version of the sync technology
  • 1.38.2 Updates:
    • Fixed a couple of sound recording bugs
    • Improved support for self joins
  • 1.38.0 Updates:
    • Recording and playing back sound should be more stable now
    • Wi-fi not available warning should be more accurate now
    • Embedded container sync should now work better with some more complex files
    • Verified iPhone OS 3.0 compatibility
    • Switching layouts using scripts should be more stable now
  • 1.37.7 Updates:
    • Added support for sound recording into container fields (records in Apple Lossless .m4a format for now, mp3 not available due to licensing restrictions), plays back sound files in container fields (wav,mp3,m4a,aac)
    • Fixed a bug with the gte and lte operators in the calculation engine
  • 1.37.6 Updates:
    • Added support for PreSync and PostSync scripts, Add "__FMWS_FMTouch_PreSync" to execute a script automatically before a sync starts (FMTouch waits for your script to finish before syncing data), and "__FMWS_FMTouch_PostSync" to execute a script when a sync ends. For example use PreSync to copy only a set of records into a syncable table, and PostSync to empty that temporary table after a sync.
    • Added support for the Evaluate calculation function
    • Added support for the GetAsNumber function
    • Fixed horizontal view bug that would cause some fields not to be enterable in horizontal view when a layout has been flipped sideways, possibly fixed a number of other related bugs with tabs and other interfaces
    • String conversions in calculations now properly drop the trailing ".0" when converting a number to a string internally
  • 1.37.5 Updates:
    • Fixed bug with cutoff tab buttons when the in-call bar is on the screen
    • Changed how empty Number fields are treated (defaults to 0 now internally)
    • Set Field now properly updates all fields on layout that depended on the changed field
  • 1.37.4 Updates:
    • Added support for Script Steps: If/Else If/Else
    • Fixed crash when taking photos introduced in the last update
    • Fixed bugs in calculation engine to support "and","or","not"
    • Fixed bugs with comments in calculations
    • Many other minor calculation engine fixes
    • New package that zips IPA with another text file, should improve Safari 4 compatibility with the download
  • 1.37.3 Updates:
    • Supports syncing embedded container fields when the special "__FMWS_FMTouch_Tools" is in your database, import/copy it from the fmtouch.fp7 sample file in the plugin package
    • Added support for Perform Script script step
    • Added support for Set Variable script step (both local variables and global variables)
    • Added support for Go to Record: Next and exit after last script step option
    • Added support for Show Custom Dialog (at this time dialog does not pause script or report on what button was clicked, useful only for text notification)
    • Added support for Loop, End Loop, and Exit Loop If script steps
    • Added support for Go to Layout: Original Layout script step option
    • Added support for Get(ScriptParameter) and Get(ScriptResult) functions
  • 1.37.1 Updates:
    • Repackaged as an ipa file to hopefully avoid verification errors (instead of unzipping, try double clicking now)
    • Added iTunes artwork to the distribution package( big thank you for the tip on how to do this goes to looter )
  • 1.37.0 Updates:
    • Added support for auto enter calculations, please test and comment
    • Fixed issue with <null> values when duplicating a record
    • Drop downs can now have custom entered values, tap the field a second time to bring up the regular keyboard
    • Field tabbing bugs fixed, tabbing over dropdowns now supported


  • 1.36.9 Updates:
    • Increase sync speed for large tables by 50-80%, smaller speed improvements in the sync for regular tables
    • Fixed crash when adding new email accounts
    • Fixed crashes that would happen when viewing more then 4-5 container fields on the same layout
    • Added support for a number of calc engine functions: GetValue, Position, Middle
    • When sending email you can now attach a CSV of the current found set
    • Table view now shows each column only once, even if it appears on the layout as a field multiple times


  • 1.36.6 Updates:
    • Added support for Min, Max, Average aggregate functions
    • Added partial support for List function: works fine on Text fields, Number field produce "0.0" for empty values and text values and append ".0" to any number values
  • 1.36.5 Updates:
    • Fixed bug with error mentioning "tcnt" whenever any calculation would be updated
  • 1.36.4 Updates:
    • Added support for Count and Sum calculation functions and they now properly update their values when you change a portal row
  • 1.36.3 Updates:
    • Fixed a number of serious calculation engine bugs, now calculations in multiple tables should be working again after being broken in the last few releases
    • improved calc container support
    • improved if statement truth testing ( now a simple if( flag ; this ; that ) without operators properly works )


  • 1.36.2 Updates:
    • Added support for field tabbing
    • Added support for special characters in beginning of field names in calcs (e.g. !@#%)
    • Fixed bug with drop down not being hidden when action sheet button is clicked
  • 1.36.1 Updates:
    • should fix installation/verification issues on provisioned devices
  • 1.36.0 Updates:
    • fixed bug that caused empty records after a stored found set is loaded after a sync, now found sets are cleared after a sync
    • fixed bug with the calculation engine not supporting negative literal numbers within calculations
    • Added support for the Trim function
    • Fixed bugs in Replace when replacing numbers
    • Fixed bug with only first value list value coming up for custom value lists
    • Added support for Left and Right functions
  • 1.35.8 Updates:
    • calculations now do not need to be "flattened", calculations that are based on other calculation fields should now be properly updating
    • value lists that are based on related tables are now properly sorted alphabetically with duplicates eliminated
    • layouts that contain calculation fields should be much faster now when switching records
  • 1.35.6 Updates:
    • fixed a number of calculation engine bugs including: proper support for "=" and "≠" in if statements, better handling of unicode characters, and other minor bugs
    • added a screen to the sync area that talks about the USB cord not being a sync method
    • added a warning when the wifi network is not enabled/connected during a sync
    • other misc bug fixes
  • 1.35.0 Updates:
    • reworked how the GPS functionality works, the coordinates should now be much more current and correct (please test)
    • changed the text in the startup informational text
  • 1.34.8 Updates:
    • Added message on start of app talking about the user guide to reduce support from people who don't know that the user guide exists
    • ODBC DSN selector is now easier to use
    • ODBC sync has options for saving the password
    • ODBC unicode sync bugs fixed
    • Container fields now properly respect read only settings, are not enterable anymore in find mode
    • Fixed a minor container field bug where identical containers appearing in more then one container field within the same record would not properly sync
  • 1.34.6 Updates:
    • Fixed problems with external file references
    • Added support for the "*" and "@" operators during finds
    • Fixed bug where fields within tabs would not show up in table view
    • Fixed bug where syncing some specific accents within some languages would cause syncs to randomly fail, very rare and affected mainly Arabic scripts
  • 1.34.2 Updates:
    • Code signing should be fixed in the iPhone OS version
    • Added support for "Value from last visited record" option when defining a field
    • Sync plugin v1.52 is now required to connect
  • 1.34.1 Updates:
    • Fixed a flag that caused the DDR to be parsed each time the database was opened causing extremely slow loading times
  • 1.34.0 Updates:
    • Added support for server syncing technology (a separate post should be used for this discussion, please do not ask/discuss this functionality in this post)
    • Added support for lookups, please test and comment
    • Attaching a layout PDF now uses the name of the layout for its file name
    • Added support for Go to URL, Close Window (exits db to main screen), Exit Application (exits FMTouch) script steps
    • Fixed a number of bugs with value lists, please test your existing value lists to make sure everything still works properly
    • Switching layouts now requires clicking the done button, makes browsing many layouts much easier
  • 1.30.6 Updates:
    • Added support for emailing, try it out using the "Send Mail" script step attached to a button. Currently you can attach a PDF of your layout to the email.
    • Buttons now turn gray when pressed to provide smoother feedback
    • Server sync is almost done, ODBC option now appears inside of the sync however it will not work without an additional server side script. This script will be provided in a few days for testing.
    • Optimized database structure storage increasing database opening times up to 40%, however DDR initialization is up to 10% slower now - we believe it is a fair trade off for faster db opening times.
  • 1.30.2 Updates:
    • Encryption - 128-256bit built in encryption
    • Tabbing
    • Container field support - take a picture with the iPhone insert into a container field (currently only links by reference)
    • Signature Capture
    • Portal sorting
    • Orientation change lock
    • Number formatting
    • Set Field
    • Improved Global field support
    • Sync plug-in speed has been improved on Windows
Personal tools