Jump to content

ertank

Members
  • Content Count

    231
  • Joined

  • Last visited

Everything posted by ertank

  1. ertank

    Dark theme

    Wondering if it is possible to have an option to choose dark theme for forum browsing. I failed to find such an option.
  2. ertank

    Dark theme

    That's a nice one.
  3. ertank

    TIdTCPClient - gpsd communication

    Hello, I am using Delphi 10.3.2, Indy version: 10.6.2.5366 (default coming with Delphi). There is a gpsd daemon running on a Raspberry Pi. It is broadcasting some json strings over TCP:2947 - I can successfully establish a connection using TIdTCPClient. There is no data incoming after connection. - Send command to stream my client these json strings after connection. There is no data incoming after sending command. Memo output: Memo1 Connecting to 192.168.1.90. Connected. On the other hand; - Using Putty, I instantly get initial greeting json string right after connection without sending anything. - if I send command to stream I instantly get json string replies. Putty terminal output: {"class":"VERSION","release":"3.17","rev":"3.17","proto_major":3,"proto_minor":12} ?WATCH={"enable":true,"json":true} {"class":"DEVICES","devices":[{"class":"DEVICE","path":"/dev/ttyS0","activated":"2019-08-31T15:56:43.607Z","native":0,"bps":9600,"parity":"N","stopbits":1,"cycle":1.00}]} {"class":"WATCH","enable":true,"json":true,"nmea":false,"raw":0,"scaled":false,"timing":false,"split24":false,"pps":false} My current test code: unit uMain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, Vcl.ExtCtrls, Vcl.StdCtrls; type TForm2 = class(TForm) IdTCPClient1: TIdTCPClient; Memo1: TMemo; Timer1: TTimer; Button1: TButton; procedure IdTCPClient1Connected(Sender: TObject); procedure IdTCPClient1Disconnected(Sender: TObject); procedure IdTCPClient1Status(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } SentStreamCommand: Boolean; public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin if Button1.Tag <> 0 then begin IdTCPClient1.Disconnect(); Button1.Caption := 'Connect'; Button1.Tag := 0; end else begin IdTCPClient1.Connect('192.168.1.90', 2947); Button1.Caption := 'Disconnect'; Button1.Tag := 1; end; end; procedure TForm2.FormCreate(Sender: TObject); begin Timer1.Enabled := False; SentStreamCommand := False; end; procedure TForm2.FormDestroy(Sender: TObject); begin if IdTCPClient1.Connected then IdTCPClient1.Disconnect(False); end; procedure TForm2.IdTCPClient1Connected(Sender: TObject); begin Timer1.Enabled := True; end; procedure TForm2.IdTCPClient1Disconnected(Sender: TObject); begin Timer1.Enabled := False; end; procedure TForm2.IdTCPClient1Status(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); begin Memo1.Lines.Add(AStatusText); end; procedure TForm2.Timer1Timer(Sender: TObject); var ReceivedText: string; begin Timer1.Enabled := False; try with IdTCPClient1 do begin if not Connected then Exit(); // read any data in if IOHandler.InputBufferIsEmpty then begin IOHandler.CheckForDataOnSource(0); IOHandler.CheckForDisconnect; if IOHandler.InputBufferIsEmpty then Exit(); ReceivedText := IOHandler.AllData(); if ReceivedText <> EmptyStr then Memo1.Lines.Add(ReceivedText); end; // if not already, send streaming command if not SentStreamCommand then begin IdTCPClient1.IOHandler.WriteLn('?WATCH={"enable":true,"json":true}'); SentStreamCommand := True; Exit(); end; end; finally if IdTCPClient1.Connected then Timer1.Enabled := True; end; end; end. I would like to understand what I am doing wrong. My main purpose is to read each json string separately as they are incoming one per line. I appreciate any help, please. Thanks & regards, Ertan
  4. ertank

    TIdTCPClient - gpsd communication

    That code did work. Though, it block my main thread. I just need to modify my logic slightly and put it in a thread and call a procedure once some json is in. I will definitely use some json parser. I simply failed to get data from server to start parsing it. Thank you.
  5. Hello, Everybody has own needs. Working on a multi-monitor system. I do not want to have IDE jump from one monitor to other when I start debugging. I failed to find a report about that and add one myself. https://quality.embarcadero.com/browse/RSP-25646 It is indicated to be under consideration. I would like if you choose to vote for it. I do strongly believe that will help people working using Delphi on a multi-monitor systems. Thanks & regards, Ertan
  6. ertank

    IDE changes monitor when debug run

    I also vote for that. As that will also keep the monitor IDE runs.
  7. ertank

    IDE changes monitor when debug run

    Monitor where you save layout is stored now. My part, I do not want it to store that.
  8. Hello, I am using Delphi 10.3.2. There is that Delphi7 project which uses over 200 units and forms. I am asked to migrate it to Delphi Rio. There are some components used for skinning that will be removed during migration. Other than this, code is mostly compatible. However, I cannot have a good compile. I get one of below errors too frequently that it gets a person fed up. Consider each line as an error returned after a different compile Could not create output file 'DCU-DEBUG\xyz.dcu' File not found: 'UnitMainForm.pas' File not found: 'UnitLogin.pas' File not found: 'UnitSalesEntry.pas' File not found: 'ERP.dpr' I am sure all these files exists. I did not copy-paste them. Used SVN to have all files in my computer. Removing all add-ons, even IdeFixPack and problem still exists. Files are on an SSD drive and there is plenty of free space on that drive. "DCU-DEBUG" folder is writable by Delphi. I do not have any errors reported by Delphi when closing (tested to see if some memory leaks or similar). I failed to find a fix for that problem and asking in here in case someone else might faced that before and can suggest a solution. Thanks & regards, Ertan
  9. I finally got a regular HDD (spin drive) and when using it compilation works. It also gives errors like above, but so rare that you can ignore them. All SMART checks on all drives are good. Now, I wonder if it is Windows 10 thing appeared with its latest update or something. I still cannot find a reason why creating files on disk fails or why it cannot find existing files.
  10. Disabling real-time virus scanner is not helping. I also used another drive and still got same problem. For the record one of the drives were NVMe and other was SSD both being pro grade drives. Using NVMe drive seemingly results in having less of the problem. I am yet to find and try with regular spin drive.
  11. I have been using Delphi 1 until Delphi 7. Then I stop programming for long years and started again recently. Yes, they exists under project directory with DPR file itself. It is not about search paths. It is something with Delphi not able to cope with very fast drives or something else that I do not know. DPR file has following lines: uses Forms, UnitLogin in 'UnitLogin.pas' {Login}, UnitMainForm in 'UnitMainForm.pas' {MAINFORM}, Error is not on same file each time. It changes. I just give some examples there. However, it mostly stops either at first or second file defined in DPR.
  12. Hello, I am using Delphi 10.3.2. I used to parse date string "Tue 17 Sep 2019" in an e-mail message using VarToDateTime() which served its purpose well. Now, format changed to "Sunday, 22 September 2019" and that function is not so helpful as before. I am trying not to manually parse the string as it is due to change in the future, too. My questions are; 1- It is always possible one cannot see a simple solution. I appreciate if you can point me to right existing Delphi solution. I could not make StrToDate() working for me even with TFormatSettings provided and even with several different input strings like "22 September 2019", "22/September/2019", etc. 2- It would be great if anybody have a unit or a function he/she can share which handles provided date format like 'dddd, dd mmmm yyyy' and convert the input string to TDateTime using that given format. I do not know C#. I saw several examples of DateTime.ParseExact() which seems like what I am searching for. I might be completely wrong about that though. Thanks & regards, Ertan
  13. Seems like initial code I share is faster than RegEx after initial call. Moreover, RegEx is failing at certain formats at the moment which will probably make it slower in all cases when all features added. Timing test code: program Project2; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, uUtils.ParseExact, System.RegularExpressions, System.Diagnostics; function Test(const Value: string; const fmtset: TFormatSettings): TDateTime; var pattern: string; match: TMatch; day: word; month: word; year: word; begin pattern := // '(' + string.Join('|', fmtset.LongDayNames) + ')' + // "dddd" ', ' + // ", " '(\d{2})' + // "dd" ' ' + // " " '(' + string.Join('|', fmtset.LongMonthNames) + ')' + // "mmmm" ' ' + // " " '(\d{4})'; // "yyyy" match := TRegEx.match(Value, pattern); if not match.Success then raise Exception.Create('Invalid data'); day := word.Parse(match.Groups.Item[2].Value); month := 1; while (month <= 12) and (fmtset.LongMonthNames[month] <> match.Groups.Item[3].Value) do inc(month); year := word.Parse(match.Groups.Item[4].Value); try Result := EncodeDate(year, month, day); except Result := 0; end; end; const Date1 = 'Sunday, 22 September 2019'; Date2 = 'Monday, 20 January 2018'; Date3 = 'Sun 15 Sep 2019'; var ADate: TDateTime; AFormatSettings: TFormatSettings; Timing: TStopWatch; begin try AFormatSettings := TFormatSettings.Create('en-US'); WriteLn('Long code timings'); Timing := TSTopWatch.StartNew(); ADate := TDateTime.ParseExact(Date1, 'dddd, dd mmmm yyyy', AFormatSettings); Timing.Stop(); WriteLn(DateToStr(ADate), 'Time: ' + Timing.Elapsed); Timing := TStopwatch.StartNew(); ADate := TDateTime.ParseExact(Date2, 'dddd, dd mmmm yyyy', AFormatSettings); Timing.Stop(); WriteLn(DateToStr(ADate), 'Time: ' + Timing.Elapsed); Timing := TStopwatch.StartNew(); ADate := TDateTime.ParseExact(Date2, 'dddd, dd mmmm yyyy', AFormatSettings); Timing.Stop(); WriteLn(DateToStr(ADate), 'Time: ' + Timing.Elapsed); Timing := TStopwatch.StartNew(); ADate := TDateTime.ParseExact(Date3, 'ddd dd mmm yyyy', AFormatSettings); Timing.Stop(); WriteLn(DateToStr(ADate), 'Time: ' + Timing.Elapsed); WriteLn('RegEx code timings'); Timing := TSTopWatch.StartNew(); ADate := Test(Date1, AFormatSettings); Timing.Stop(); WriteLn(DateToStr(ADate), 'Time: ' + Timing.Elapsed); Timing := TSTopWatch.StartNew(); ADate := Test(Date2, AFormatSettings); Timing.Stop(); WriteLn(DateToStr(ADate), 'Time: ' + Timing.Elapsed); Timing := TSTopWatch.StartNew(); ADate := Test(Date2, AFormatSettings); Timing.Stop(); WriteLn(DateToStr(ADate), 'Time: ' + Timing.Elapsed); Timing := TSTopWatch.StartNew(); ADate := Test(Date3, AFormatSettings); Timing.Stop(); WriteLn(DateToStr(ADate), 'Time: ' + Timing.Elapsed); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; ReadLn; end. My system output: Long code timings 22.09.2019Time: 00:00:00.0001696 20.01.2018Time: 00:00:00.0000132 20.01.2018Time: 00:00:00.0000157 15.09.2019Time: 00:00:00.0000134 RegEx code timings 22.09.2019Time: 00:00:00.0001281 20.01.2018Time: 00:00:00.0000404 20.01.2018Time: 00:00:00.0000255 Exception: Invalid data
  14. Only thing that maybe missing is "ddd" and "mmm" aka ShortDayNames and ShortMonthNames above. I find RegEx powerful. Unfortunately, I am not familiar with it at all. Would you add these two possible patterns in your sample code, please?
  15. Shared C# code conversion is out of my league. I would vote for such a function to be implemented in Delphi by Embarcadero though. For now, I have written something as following. My two versions are parsed OK with that. I might improve this code to have time part and to handle my possible fail cases in the future. I am not after very fast code at the moment. For now I will keep that one. unit uUtils.ParseExact; interface uses System.SysUtils; type TDateTimeHelper = record helper for TDateTime public class function ParseExact(const Value, Format: string; AFormatSettings: TFormatSettings): TDateTime; static; end; implementation procedure GetNumber(const InValue: string; out OutValue: Integer); var Finish: Integer; begin Finish := 1; while CharInSet(InValue.Chars[Finish], ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']) do Inc(Finish); if not TryStrToInt(InValue.Substring(0, Finish), OutValue) then raise Exception.Create('Cannot convert to number'); end; class function TDateTimeHelper.ParseExact(const Value, Format: string; AFormatSettings: TFormatSettings): TDateTime; label Again; var Day: Integer; Month: Integer; Year: Integer; TempString: string; TempFormat: string; I: Integer; begin Result := 0; TempString := Value.ToLower(); TempFormat := Format.ToLower(); if TempFormat.Contains('mmm') or TempFormat.Contains('mmmm') then begin // month string literals converted to numbers for I := Low(AFormatSettings.LongMonthNames) to High(AFormatSettings.LongMonthNames) do begin TempString := TempString.Replace(AFormatSettings.LongMonthNames[I].ToLower(), I.ToString()); TempString := TempString.Replace(AFormatSettings.ShortMonthNames[I].ToLower(), I.ToString()); end; TempFormat := TempFormat.Replace('mmmm', 'mm'); TempFormat := TempFormat.Replace('mmm', 'mm'); end; if TempFormat.Contains('ddd') or TempFormat.Contains('dddd') then begin // day string literals are simply removed for I := Low(AFormatSettings.LongDayNames) to High(AFormatSettings.LongDayNames) do begin TempString := TempString.Replace(AFormatSettings.LongDayNames[I].ToLower(), EmptyStr); TempString := TempString.Replace(AFormatSettings.ShortDayNames[I].ToLower(), EmptyStr); end; TempFormat := TempFormat.Replace('dddd', EmptyStr); TempFormat := TempFormat.Replace('ddd', EmptyStr); end; TempFormat := TempFormat.Trim(); TempString := TempString.Trim(); Again: // remove non relevant chars at beginning while not CharInSet(TempFormat.Chars[0], ['a'..'z']) do begin TempFormat := TempFormat.Substring(1, MaxInt); TempString := TempString.Substring(1, MaxInt); end; if TempString.Length > 0 then begin case TempFormat[1] of 'd': begin if Day = 0 then GetNumber(TempString, Day); I := 0; while CharInSet(TempString.Chars[I], ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', AFormatSettings.DateSeparator]) do Inc(I); TempString := TempString.Substring(I, MaxInt); TempFormat := TempFormat.Replace('dd', EmptyStr); goto Again; end; 'm': begin if Month = 0 then GetNumber(TempString, Month); I := 0; while CharInSet(TempString.Chars[I], ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']) do Inc(I); TempString := TempString.Substring(I, MaxInt); TempFormat := TempFormat.Replace('mm', EmptyStr); goto Again; end; 'y': begin if Year = 0 then GetNumber(TempString, Year); I := 0; while CharInSet(TempString.Chars[I], ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']) do Inc(I); TempString := TempString.Substring(I, MaxInt); goto Again; end; end; end; if (Day > 0) and (Month > 0) and (Year > 0) then begin try Result := EncodeDate(Year, Month, Day); except raise Exception.Create('uUtils.ParseExact(): Cannot encode.' + sLineBreak + sLineBreak + 'Year: ' + Year.ToString() + sLineBreak + 'Month: ' + Month.MaxValue.ToString() + sLineBreak + 'Day: ' + Day.ToString()); end; end else begin raise Exception.Create('uUtils.ParseExact(): Cannot parse all day, month and year'); end; end; end. Usage is as following: uses uUtils.ParseExact; var ADate: TDateTime; AFormatSettings: TFormatSettings; begin AFormatSettings := TFormatSettings.Create('en-US'); ADate := TDateTime.ParseExact('Sunday, 22 September 2019', 'dddd, dd mmmm yyyy', AFormatSettings); ShowMessage(DateToStr(ADate)); ADate := TDateTime.ParseExact('Sun 15 Sep 2019', 'ddd dd mmm yyyy', AFormatSettings); ShowMessage(DateToStr(ADate)); end;
  16. Hello, There is that WSDL here: http://messaging.yemeksepeti.com/messagingwebservice/integration.asmx?WSDL I need to read data from method named "GetRestaurantList" actually that is my starting method. I hopefully will need to use other methods later. I do not get exception on user level. But there is below error in Delphi while in debug run. First chance exception at $767DC762. Exception class ESOAPDomConvertError with message 'Conversion from class TList<System.IInterface> to SOAP is not supported - SOAP classes must derive from TRemotable'. Process YemekSepeti_WebServis.exe (9024) Here is the raw response from server: <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap:Body> <GetRestaurantListResponse xmlns="http://tempuri.org/"> <GetRestaurantListResult> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="RestaurantList"> <xs:element name="RestaurantList" msdata:IsDataSet="true" msdata:Locale=""> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="Restaurants"> <xs:complexType> <xs:sequence> <xs:element name="CatalogName" type="xs:string" minOccurs="0" /> <xs:element name="CategoryName" type="xs:string" minOccurs="0" /> <xs:element name="DisplayName" type="xs:string" minOccurs="0" /> <xs:element name="ServiceTime" type="xs:int" minOccurs="0" /> <xs:element name="Speed" type="xs:decimal" minOccurs="0" /> <xs:element name="Serving" type="xs:decimal" minOccurs="0" /> <xs:element name="Flavour" type="xs:decimal" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema> <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <RestaurantList xmlns=""> <Restaurants diffgr:id="Restaurants1" msdata:rowOrder="0"> <CatalogName>testname</CatalogName> <CategoryName>4f1cc1a8-bf2e-4eab-8dd5-34f37857911a</CategoryName> <DisplayName>Pizza, Test</DisplayName> <ServiceTime>45</ServiceTime> </Restaurants> </RestaurantList> </diffgr:diffgram> </GetRestaurantListResult> </GetRestaurantListResponse> </soap:Body> </soap:Envelope> Honestly, this is the first time I am reading such a response myself. Is there any way that I can consume that web service? Any help is appreciated. Thanks & regards, Ertan
  17. ertank

    SOAP response cannot be read

    I am not designing SOAP server side. It is a production server running for years. Very much likely that it is designed using Microsoft tools. I am to consume it using Delphi. I already did that. Using generated web service file, I am doing below request. <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Header> <NS1:AuthHeader xmlns:NS1="http://tempuri.org/"> <UserName xmlns="http://tempuri.org/">myuser</UserName> <Password xmlns="http://tempuri.org/">mypassword</Password> </NS1:AuthHeader> </SOAP-ENV:Header> <SOAP-ENV:Body> <GetRestaurantList xmlns="http://tempuri.org/" /> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Response I get is already shared in my initial post. Web service consuming is not open to public. It has IP restrictions and so it will not help even if I share my login credentials to anybody for doing some tests. Problem as to my understanding is that, Delphi cannot parse response from server. I cannot suppress raised exception and such an exception stops me doing anything like trying to manually parse the raw XML as I always get a dialog displayed on the screen. That application I need to run headless and do web server requests in intervals automatically. An error message with a dialog stops me doing so.
  18. ertank

    Indy - rev.5507 compile problem

    Hello, I cannot compile latest revision of Indy using fpcupdeluxe. Below is log of errors I receive: Compiling Debug Version (1002) Target OS: Win64 for x64 (3104) Compiling indylaz.pas (3104) Compiling .\Core\IdAboutVCL.pas (3104) Compiling .\Core\IdDsnCoreResourceStrings.pas (1010) Writing Resource String Table file: IdDsnCoreResourceStrings.rsj (3104) Compiling .\System\IdGlobal.pas (3104) Compiling .\System\IdException.pas (3104) Compiling .\System\IdResourceStrings.pas (1010) Writing Resource String Table file: IdResourceStrings.rsj (3104) Compiling .\System\IdStream.pas (3104) Compiling .\System\IdStreamVCL.pas (3104) Compiling .\Core\IdAntiFreeze.pas (3104) Compiling .\System\IdAntiFreezeBase.pas (3104) Compiling .\System\IdBaseComponent.pas C:\fpcupdeluxe\ccr\indy\Lib\.\Core\IdAntiFreeze.pas(101,96) Error: (2021) ENDIF without IF(N)DEF C:\fpcupdeluxe\ccr\indy\Lib\.\Core\IdAntiFreeze.pas(103,91) Error: (2021) ENDIF without IF(N)DEF C:\fpcupdeluxe\ccr\indy\Lib\.\Core\IdAntiFreeze.pas(104,82) Error: (2021) ENDIF without IF(N)DEF C:\fpcupdeluxe\ccr\indy\Lib\.\Core\IdAntiFreeze.pas(112,83) Error: (2021) ENDIF without IF(N)DEF C:\fpcupdeluxe\ccr\indy\Lib\.\Core\IdAntiFreeze.pas(113,80) Error: (2021) ENDIF without IF(N)DEF C:\fpcupdeluxe\ccr\indy\Lib\.\Core\IdAntiFreeze.pas(114,81) Error: (2021) ENDIF without IF(N)DEF C:\fpcupdeluxe\ccr\indy\Lib\.\Core\IdAntiFreeze.pas(115,78) Error: (2021) ENDIF without IF(N)DEF C:\fpcupdeluxe\ccr\indy\Lib\.\Core\IdAntiFreeze.pas(118,91) Error: (2021) ENDIF without IF(N)DEF C:\fpcupdeluxe\ccr\indy\Lib\.\Core\IdAntiFreeze.pas(119,86) Error: (2021) ENDIF without IF(N)DEF C:\fpcupdeluxe\ccr\indy\Lib\.\Core\IdAntiFreeze.pas(121,12) Error: (2021) ENDIF without IF(N)DEF C:\fpcupdeluxe\ccr\indy\Lib\.\Core\IdAntiFreeze.pas(122,3) Fatal: (2003) Syntax error, "=" expected but ")" found Fatal: (1018) Compilation aborted Error: C:\fpcupdeluxe\fpc\bin\x86_64-win64\ppcx64.exe returned an error exitcode Error: (lazarus) Compile package indylaz 10.6.2: stopped with exit code 1 Error: (lazarus) [TLazPackageGraph.CompileRequiredPackages] "Exit code 1" Error: (lazarus) Building IDE: Compile AutoInstall Packages failed. make: *** [useride] Error 2 fpcupdeluxe: ERROR: UniversalInstaller (ConfigModule: indy): Failure trying to rebuild Lazarus. Details: ERROR: Fpcupdeluxe fatal error ! I checked IdAntiFreeze.pas, but it is slightly complicated IF conditionals in there for me. I do not have a spare VM with Delphi to test if it is compiled fine with Delphi. Using stock Indy delivered with Delphi installation for now. Thanks & regards, Ertan
  19. ertank

    Indy - rev.5507 compile problem

    That just worked. Thanks a lot.
  20. ertank

    CDATA CSV Component

    Hello, You did not clarify if you need FMX or VCL or both in your question. I am using SMImport, SMExport suite from http://www.scalabium.com for years. Never had the need to look for another solution. They are VCL only.
  21. ertank

    Publishing iOS apps

    Hello, There is an app ready to be put on App Store. That app was previously deployed using another development tool that I do not know. This will be an update for that successor. However, it cannot be deployed using Application Store configuration. As far as I can tell. MacOS already have deployment certificate installed. However, that cannot be seen in Delphi Project options->Deployment-Provisioning There is no problem on deploying using development configuration on a physical iPhone at all. There is no problem on deploying on Simulator as well. None of the documentation that we read so far helped us. There is no problem viewing development certificate on same options page. Any help is appreciated. Thanks & regards, Ertan
  22. ertank

    Publishing iOS apps

    Following following steps, I finally can deploy for Application Store and have my IPA file generated. 1. revoke your active certificate in the provisioning portal 2. create new developer certificate (keychain access/.../request for csr...etc.) 3. download and install a new certificate 4. create a new provisioning profile for existing app id (on provisioning portal) 5. download and install new provisioning profile and in the build, settings set the appropriate code signing identities More details can be found at here: https://stackoverflow.com/questions/12867878/missing-private-key-in-the-distribution-certificate-on-keychain Thanks to everyone.
  23. ertank

    Publishing iOS apps

    As it is explained, it is in the "menu" of Keychain application. Below screen capture is from my system. Highlighting the relevant menu item. Even if my system is not English, location should be same in your system.
  24. ertank

    Publishing iOS apps

    There is such a menu item. Nothing is listed when I click on it. Seems I don't have any expired certificate at all. that makes sense as initially that app distributed by some other developer using some other development tool. However, I finally found reason. I go to Preferences under XCode menu item. Under accounts, I click Manage Certificates and below is what I see. Even if I have found reason, I still do not know how to fix that.
  25. ertank

    Publishing iOS apps

    Actually, I already have a certificate linked to it. That same certificate is already loaded on MacOS, too. I see it in KeyChain. I am confused. Here is a screen shot:
×