Release Notes for Appmethod 1.14

From Appmethod Topics
Jump to: navigation, search

These Release Notes contain important information that might not appear in the main product documentation. We recommend that you read this page in its entirety. For the most current version of these notes, see Release Notes for Appmethod 1.14.

Contents

Installing, Uninstalling, and Upgrading Your Product

Before you install, uninstall, or upgrade the product, read the Install.htm and License.rtf files. The Install.htm file gives the system and free space requirements, and installation and upgrade procedures. License.rtf is your Software License and Support agreement.

Read the most current version of the Install.htm file on the docwiki at Installation Notes for Appmethod 1.14.

Here are other ways to access the Install.htm file:

  • Open the Installer.zip file
  • Click the Help button on the Install launcher
  • Open Install.htm in your product installation directory; by default, this directory is:
    C:\Program Files\Embarcadero\Studio\n.n
    • For more information about installation, deployment, and licensing issues, see the Install.htm, Deploy.htm, and License.rtf files that are installed by default at C:\Program Files\Embarcadero\Studio\n.n (on 64-bit Windows, the directory is Program Files (x86)).

FireMonkey Notes

INTERNET Permission Always Set for Debug Configuration on Android

Your Android apps have several Uses Permissions set by default, including the INTERNET permission.

  • When you build an Android app with the Configuration set to Debug (in the Project Manager), the INTERNET permission is always implicitly set, even if you disable the INTERNET permission on Uses Permissions. This is because the Appmethod debugger requires the INTERNET permission.
  • For the Application Store configuration in the Project Manager, you can disable the INTERNET permission using Project > Options > Uses Permissions.

Here is the Project Manager with the Debug configuration node set for an Android app:
ConfigProjMgrAndroid.png

Workaround for DataSnap REST Application

When you create an Object Pascal DataSnap REST Application with TDataModule as the ancestor, the IDE creates an unnecessary dependency with DSProviderDataModuleAdapter. The workaround is to remove DataSnap.DSProviderDataModuleAdapter from the uses in ServerMethodUnit1.pas


Workaround for FirstDayOfWeek with TCalendar

Setting TCalendar.FirstDayOfWeek to dowLocaleDefault might not result in the correct first day of the week in all locales (that is, Monday for some countries, and Sunday for other countries). We recommend that you use the RTL function System.DateUtils.StartOfTheWeek, as follows:

Calendar.FirstDayOFWeek := System.DateUtils.StartOfTheWeek;

Workaround for Android 4.0/Kindle Fire Message: "Application does not support this device"

When you try to run an Android app on a device running Android 4.0.x (including some Amazon Kindle Fire devices), you might see this message:

 Application does not support this device

To workaround this issue:

  1. In the IDE, open the Deployment Manager (Project > Deployment), and locate the following entry:
    Local Name: libnative-activity.so
    Remote Path: library\lib\armeabi\
  2. Uncheck the entry to prevent deployment of this file.

iOS App Might Not Close/Reopen Properly After Running without Debugging on the Device

If you run your iOS app on the device without debugging and then kill the process of your application on the device, you will need to run the PAServer reset command if you want to run the process outside the IDE; type 'r' at the PAServer command prompt.

Workaround for Compile Errors in a C++ OS X App

Very rarely, compiling a basic C++ OS X app might fail with an error. If this happens, you should try downloading your SDK file again. For instructions, see Adding a Mac OS X or iOS Device SDK.

Appmethod C++ Notes

Using C++ Code from XML Data Binding Wizard

To use the code generated by the C++ XML DataBinding Wizard in a package, add the #pragma package(smart_init) directive to the source (.cpp) file. This eliminates linker errors such as:

[ilink32 Error] Error: Export bool __fastcall System::TObject::GetInterface<Xml::Xmlintf::IXMLDocument>  (System::DelphiInterface<Xml::Xmlintf::IXMLDocument>&) in module DataBin

Downloading DirectX Header Files

We only ship DirectX headers inside the Microsoft Windows Platform SDK. If you encounter errors such as "d3d.h file not found", the HPP generated for that Object Pascal unit contains #include <D3D*.hpp>. You can do either of the following:

  • Add a {$NOINCLUDE Winapi.D3DX9} directive to the unit that uses the D3D unit and regenerate the HPP file of that unit. The regenerated HPP will not contain the #include <Winapi.D3DX9.hpp>.
  • Download the DirectX SDK that the D3D header relies upon. You can download the DirectX SDK for free from Microsoft. For more information, see Where is the DirectX SDK? (Windows).

Events with Structs or Sets of 5-8 Bytes Are Not Valid for BCC64

Events generated by the IDE that take a struct or set that is between 5-8 bytes are valid for 32-bit C++, but not valid for 64-bit C++. This only affects cases where the type is passed by value. For cases where the type is passed by reference, there is no difference between Win32 and Win64.

For example, an Access Violation occurs when accessing the TPoint &MousePos parameter of the OnContextPopup event, because the TPoint &MousePos parameter is invalid on the Win64 platform. If you look at the __closure type declaration, you can see the difference between Win32 and Win64. Here is the __closure declaration for the PopupMenu event of TControl:

#ifndef _WIN64
typedef void __fastcall (__closure *TContextPopupEvent)(System::TObject* Sender, const System::Types::TPoint &MousePos, bool &Handled);
#else /* _WIN64 */
typedef void __fastcall (__closure *TContextPopupEvent)(System::TObject* Sender, System::Types::TPoint MousePos, bool &Handled);
#endif /* _WIN64 */

To get the code to work for both Win64 and Win32, you must #ifdef the IDE-generated handler as follows:

#ifndef _WIN64
void __fastcall TForm46::FormContextPopup(TObject *Sender, TPoint &MousePos, bool &Handled)
#else
void __fastcall TForm46::FormContextPopup(TObject *Sender, TPoint MousePos, bool &Handled)
#endif
{
  ShowMessage(System::String().sprintf(L"Mouse at (%d,%d)", MousePos.X, MousePos.Y));
}

Cannot Programmatically Assign IDE-Generated Event Handlers that Have Interfaces as Parameters

Object Pascal interfaces are exposed as templates in C++. That is, Object Pascal interface IFoo becomes _di_IFoo in C++. But the IDE is instead generating IFoo* in event handlers. This causes two problems:

  • The event handler generated by the IDE cannot be assigned to the event programmatically, because the compiler sees the mismatch in the event's declaration and the handler declaration.
  • The event handler does not get the prologue/epilogue code generated by the C++ compiler for Object Pascal interfaces.

NOTE: This issue affects newer runtimes like REST, FireDAC and even Live Bindings. All of these have events that have interface types as parameters. VCL, however, does not have events with interface parameters.

For example, following is a standard closure event handler (the added comment indicates the point of difference with the generated handler):

typedef void __fastcall (__closure *TFDConnectionRecoverEvent)(System::TObject* ASender, 
  const Firedac::Stan::Intf::_di_IFDStanObject AInitiator, // <<< ***
  System::Sysutils::Exception* AException,
  Firedac::Phys::Intf::TFDPhysConnectionRecoverAction &AAction);

But here is the IDE-generated event handler (also with an added comment):

void __fastcall TForm1::FDConnection1Recover(TObject *ASender, 
          const IFDStanObject *AInitiator, // <<< ***
          Exception *AException, 
          TFDPhysConnectionRecoverAction &AAction)

You can safely use the handler generated by the IDE. However, if you attempt to assign the handler programmatically, the compiler generates an error because of the mismatch between the closure and the handler's signature.

The Workaround: If you want to refer programmatically to the handler, perform the following steps:

  1. Clear out the event in the Object Inspector (the IDE will not delete the handler as long as it is not empty).
  2. Move the handler out of the __published section. (You can move it to the public, protected, or private section of the class.)
  3. Update the declaration and definition of the handler to match the closure declaration.
    For example, in the case of our example, replace IFDStanObject * with _di_IFDStanObject.

Now you should be able to assign the handler programmatically.

IDE Notes

Renamed Project Might Fail at Run Time or When Debugging

Renaming a project in the IDE can cause an iOS app to fail at run time and debug time. To correct the issue, do the following:

  1. Select Project > Deployment.
  2. In the Deployment Manager, click the Revert To Default speed button.

Mobile Setup Wizard Content Is Blocked on Windows Server 2008

Appmethod shows you the Mobile Setup Wizard when you are working on a mobile application and you:

  • Need to follow some configuration steps to continue.
  • Run into an issue and might need help.

You can also select Help > Mobile Setup Wizard to open the Mobile Setup Wizard.

When this wizard opens in Windows Server 2008, Windows shows an Internet Explorer dialog box. You must add the content of the wizard to the whitelist of Internet Explorer in order to see the content of the wizard.

You can see the mobile setup wizard here:

Database Notes

Remove Unnecessary Header File for C++ DataSnap REST Client Module

If you create a C++ DataSnap REST client module, an unnecessary file is added. Here is the workaround for OS X & Mobile apps:

  • Remove the following item from ClientClassesUnit1.h:
 //#include "Data.DBXCDSReaders.hpp"

New ASchemaName Parameter in TFDLocalSQLDataSets.Add Function

The TFDLocalSQLDataSets.Add function has a new parameter, ASchemaName.

Older code such as:

 D.DataSets.Add(B, 'MyData');

should be replaced with:

 D.DataSets.Add(B, '', 'MyData');

Otherwise 'MyData' is considered to be the ASchemaName, and older applications will crash.

Using Run-Time Packages with C++ FireDAC DataSnap Driver

If you use the FireDAC DataSnap driver in Win64 C++ applications built with run-time packages, you might receive an error at run time. To avoid the error, you need to add DataSnapClient to the run-time packages, following these steps:

  1. Project > Options > Packages > Runtime Packages.
  2. In the Runtime package import libraries field, add DataSnapClient to the list.

This setting resolves the problem and adds DataSnapClient.bpi to the link line rather than DataSnapClient.a.

64-bit Windows C++ Application with a FireDAC Component Might Raise Error

The following error is raised when attempting to compile an application using a single FireDAC component, when the platform is Windows x64 with static linking:

C:\Program Files (x86)\Embarcadero\Studio\14.0\Bin\CodeGear.Cpp.Targets : warning : Warning: Out of memory
C:\Program Files (x86)\Embarcadero\Studio\14.0\Bin\CodeGear.Cpp.Targets(2751,5): error MSB6006: "ilink32" exited with code 2.

The workaround is to not link FireDAC statically in Win64 C++ apps.

Workaround for INI File Errors with FireDAC

In version 1.13, FireDAC created INI files in "C:\Program Files", which in modern Windows versions is read-only for regular Windows users. If you are getting errors like "Can't modify file" when adding new FireDAC connection definitions using the Data Explorer or FDExplorer, then FireDAC INI files might still be located in "C:\Program Files". To resolve the issue, you should download and run the FDFixIni utility, which relocates FireDAC INI files to a correct location and updates the FireDAC registry. By default, the correct location is "C:\Documents and Settings\All Users\Documents\Embarcadero\Studio\FireDAC".

To resolve the issue:

  • download FDFixIni from the Registered Users site: http://cc.embarcadero.com/item/29812;
  • extract EXE from downloaded archive;
  • and run it. If the utility runs successfully, it will output two lines with Move [old location] to [new location].

InterBase XE3 Developer Edition Accompanies Some Editions of Appmethod

This note pertains to users who have both an earlier version of Appmethod (1.13) and Appmethod 1.14 installed on the same machine. In this note, the mention of Appmethod also implicitly includes both the Object Pascal and Appmethod C++ editions.

Appmethod 1.13 and 1.14 all include InterBase XE3 Developer Edition. Each license suite for Appmethod includes a license for InterBase XE3 Developer Edition as well. Since all these Appmethod license suites are visible system-wide, only one license of InterBase XE3 Developer Edition can be used at any time.

If you happen to be running the "InterBase XE3 Developer Edition" that came with an earlier Appmethod version, you will not be able to start a simultaneous "developer_ibxe3" instance of InterBase XE3 Developer Edition that comes with Appmethod 1.14. If you try to start this, you will receive an error dialog stating "InterBase licensing error". Further inspection of interbase.log from your "developer_ibxe3" instance will show "Registration file error: License is in use by another instance of InterBase".

Workaround for InterBase XE3 Licensing Errors

  1. Stop your "gds_db" or other named InterBase instance, as the case might be, from your Appmethod 1.13 install. If you have set up this instance as a Windows Service, please disable it in the system Service Control Panel also.
  2. Restart your Appmethod installed copy of InterBase XE3 "developer_ibxe3" instance. It will now launch successfully with the proper license.

The above mentioned earlier Appmethod version, and applications built using it, can also work with the updated InterBase XE3 Developer Edition installed with Appmethod 1.14. Have your Appmethod 1.13 IDE tools and applications connect to your database via TCP loopback to this InterBase instance. For example:

localhost/developer_ibxe3:<dbpath>

In the Appmethod IDE, you might also want to select Tools > Options > Environment Options > Environment Variables and add the following new "User overrides" entries for making local client connections.

  • Variable: IB_Protocol
    • Value: developer_ibxe3
  • Variable: InterBase
    • Value: C:\Program Files (x86)\Embarcadero\Studio\14.0\InterBaseXE3

Deployment Manager Note (Android App Failure)

An Android app might not start on the device if the deployment contains a file with Unicode characters. For example, if you add a file named 'test試験.txt' to an Android deployment, only a black screen appears and the app closes. This happens because a file with Unicode characters in the file name is ignored and is not added to the Android .apk file. The app fails because of the incomplete deployment.

Debugger Notes

Timing Issues with Load Process

If you have problems debugging a Mac OS X app that crashes immediately after you run it using Load Process, you should select either the "Do not run" option or the "Run to entry point" option (choices under "After load"). Either option can solve the timing issues concerning when the app runs and hits debug events, versus when the debugger is setup and ready to handle the events. These timing issues can cause the debugger to hang.

Android Console App Must Provide a Pause at Startup

When you run an Android console app, the app might run to completion before the debugger can start. To avoid this issue, we suggest that you add a sleep command at the beginning of your code. For example:

sleep(3000)

The sleep number (specified in seconds) that works for your app is dependent on your target device's overall performance; that is, slow hardware requires more waiting time. For an Android Emulator (AVD), the AVD host speed is also a factor, and a safe timeout for an AVD might be as much as several minutes.

Help Notes

Location of Installed Help

By default, the help files are installed at C:\Program Files (x86)\Embarcadero\Studio\14.0\Help\Doc.

Microsoft Document Explorer 2008 (DExplore.exe)

DExplore is required in order to view the Object Pascal and Appmethod C++ locally installed documentation. If you do not have Microsoft Document Explorer 2008 installed, it will be installed as part of the Help System Install.

  • It is a known issue that a pre-release version of the license for Microsoft Document Explorer XE is displayed.
  • If you receive an access violation when you press F1 in the IDE, it is possible that an incompatible version of DExplore.exe has been installed. To verify the version, run DExplore.exe standalone, check the Help | About box: If it says QFE, a quick fix has been installed by either Visual Studio 2008 or Prism. To fix this problem, go to the Control Panel and run a Repair operation on the Object Pascal and Appmethod C++ 1.14 Help System.

MSSDK Help

The Microsoft Windows Platform SDK help can be installed by choice with the product help. The help installer runs inside the product installer. You can choose to install the MS SDK Help when you install the help by setting the MS SDK Help item on the Select Features page of the Help installer to Will be installed on local hard drive. For more information, see the Installation Notes for Appmethod 1.14 file.

See Also