philipp.hofmann
-
Content Count
62 -
Joined
-
Last visited
Posts posted by philipp.hofmann
-
-
I've found only one difference here and this could not be an issue for MacOS:
{$IFDEF ANDROID}
{$MESSAGE 'TODO processmessage loop'}
Result := False; // Error { V9.1 }
{$ENDIF ANDROID}
But I've checked the reason for the blocker in
function TMultiReadExclusiveWriteSynchronizer.BeginWrite: Boolean;
is the line as here it's not coming back:
WaitForWriteSignal;
P.S.:
TIcsMessagePump.ProcessMessage
is not reached under MacOS, if this could be an issue here.
P.P.S.:
I assume it's an initialisation issue if such a central functionality as WaitForWriteSignal is not working and processMessage is not requested at all. But I don't know what to test further. -
It's 100% fine with the Windows sample with the same code.
-
I have deactivated GlobalSync now first. That's fine for me. But can you fix also the
"SSL handshake faild - No error returned, State: SSLv3/TLS write client hello, connection closed unexpectedly"issue? This is currently my blocker.
-
Now my problem is the request
TSSLSmtpCli.create(nil);or also
TSSLSmtpCli.create(mainForm);
freezes inprocedure TIcsMessagePump.AfterConstruction;
with the following request:
GlobalSync.BeginWrite;
But even if I remove GlobalSync.BeginWrite at all
SSLSmtpCli.connectis not reacting as expected as "SSL handshake faild - No error returned, State: SSLv3/TLS write client hello, connection closed unexpectedly" is raise after 60 seconds.
The same implementation works fine under Windows.
P.S.: I was misleading by https://wiki.overbyte.eu/wiki/index.php/ICS_Download as there is a MacOS support mentioned for ICS-V9. -
Now my problem is the request
TSSLSmtpCli.create(nil);or also
TSSLSmtpCli.create(mainForm);
freezes inprocedure TIcsMessagePump.AfterConstruction;
with the following request:
GlobalSync.BeginWrite;
But even if I remove GlobalSync.BeginWrite at all
SSLSmtpCli.connect
is not reacting as expected as SslSmtpClient.OnRequestDone is never reached. -
OverbyteIcsSSLEAY.pas:
You should use the following file names for 300DLL_Name (so no /usr/lib-path in the filename plus adding version number):
{$IFDEF POSIX}'libcrypto.3.dylib';{$ELSE} { !!!! not tested, unknown file name }
{$IFDEF POSIX}'libssl.3.dylib';{$ELSE}OverbyteIcsLIBEAY.pas:
It works if I uncomment @@RAND_screen in the table (and reduce the number by 1):
GLIBEAYImports1: array[0..852] of TOSSLImports = (
// (F: @@RAND_screen; N: 'RAND_screen'; MI: OSSL_VER_MIN; MX: OSSL_VER_MAX),I saw afterwards the correct OpenSSL-Version number with
OpenSSL_version(0) -> 3.2.1
But there is still a problem in initialization of
TSSLSmtpCli.create(nil);
It's working fine unter Windows again. So I will check this as the next point.
So I'm not sure if my idea to replace Indy-TIDSMTP with ICS-TSSLSmtpCli to support MacOS64-ARM was so good because I can't find MacOS-ARM-Libraries for OpenSSL-1.0.x.- 1
-
The first thing I found now, you need:
GSSL_PUBLIC_DIR:=TPath.GetDirectoryName(ParamStr(0));
IcsLoadSsl();
And you need to deploy to
Contents\MacOS\usr\lib
But now I get the error
Can not find: RAND_screen -
Is your problem solved? I have the same problem but I assume it has to do with SSL initialization.
-
Hi,
I try to use the TSSLSmtpCli component (created during lifetime) on MacOS 64 (x86 and ARM).
The files
libcrypto.3.dylib
libssl.3.dylibare deployed to
Contents\MacOS\So
FileExists(ExtractFilePath(ParamStr(0))+'/libcrypto.3.dylib')
FileExists(ExtractFilePath(ParamStr(0))+'/libssl.3.dylib')
is true.
But
OpenSSL_version(0)returns an exception. So I assume the shared libraries are not initialized.
How I can do this?
For Windows this process works without any special requests beforehand.
Best regards, Philipp -
Hi,
my current Indy implementation sends email synchron, so my method is waiting until the mail is sent and then showing a result.
It's not clear for me how I can achieve this with ICS-code as after I've requested connect, the app is frozen, even if I request connect within a thread.
Is this achievable to avoid bigger changes on our code while migrating from Indy to ICS?class function TEMailUtils.sendEmail(receiver,subject,body,attachment:String;IdIOHandler:TIdSSLIOHandlerSocketOpenSSL;doNotReply:boolean):boolean; begin finished:=false; if (sslSmtpClient=nil) then begin sslSmtpClient:=TSSLSmtpCli.create(nil); sslContext:=TSSLContext.create(nil); sslSmtpClient.SslContext:=sslContext; SslSmtpClient.Host:='smtp.xxxxxx.de'; SslSmtpClient.Port:='465'; SslSmtpClient.AuthType:=TSmtpAuthType.smtpAuthLogin; SslSmtpClient.SslType:=TSmtpSslType.smtpTlsImplicit; SslSmtpClient.Username:='xxxxxxxx@xxxxxxxx.com'; SslSmtpClient.Password:='xxxxxxxxxxxxx'; SslSmtpClient.OnRequestDone:=SslSmtpClientRequestDone; end; if (doNotReply) then SslSmtpClient.FromName:='doNotReply (icTrainer)' else SslSmtpClient.FromName:='icTrainer'; SslSmtpClient.HdrFrom:=SslSmtpClient.FromName; SslSmtpClient.HdrTo := receiver; SslSmtpClient.RcptName.Clear; SslSmtpClient.RcptNameAdd(receiver,'',''); SslSmtpClient.HdrSubject := subject; SslSmtpClient.MailMessage:=TStringUtils.getTStringList(body,'|'); SslSmtpClient.EmailFiles.Add(attachment); mlog.info('start sendMail'); SslSmtpClient.Connect; while (not finished) do sleep(100); result:=resultVal; mlog.info('finished sendMail: '+TStringUtils.BoolToStr(resultVal)); end; class procedure TEMailUtils.SslSmtpClientRequestDone(Sender : TObject; RqType : TSmtpRequest; Error : Word); begin mlog.info('RequestDone Rq=' + IntToStr(Ord(RqType)) + ' Error='+ IntToStr(Error)); if (Error <> 0) then begin mlog.info('Can`t send mail: RequestDone Rq=' + IntToStr(Ord(RqType)) +' Error='+ SslSmtpClient.ErrorMessage); finished:=true; Exit; end; case RqType of smtpConnect: SslSmtpClient.Ehlo; smtpEhlo: SslSmtpClient.Auth; smtpAuth: SslSmtpClient.MailFrom; smtpMailFrom: SslSmtpClient.RcptTo; smtpRcptTo: SslSmtpClient.Data; smtpData: begin mlog.info('Send Mail and quit'); resultVal:=true; finished:=true; SslSmtpClient.Quit; end; end; end;
-
Hi,
my app runs under Windows perfectly with two displays.
With MacOS and one display everything is fine also.
But my customer sometimes report the following error if they are using two displays:
Zugriffsverletzung bei Adresse 0000000102C2CD7D beim Zugriff auf Adresse 0000000000000000
At address: $0000000102C2CD7D (Fmx.Platform.Mac.TMacMetalView.displayLayer(Macapi.Quartzcore.CALayer) + 173)Call stack:
icTrainer $0000000102633E4D SignalConverter + 45
icTrainer $0000000102633E20 SignalConverter + 0
icTrainer $000000010399F2DF DispatchToDelphi + 209
QuartzCore $00007FF81E49363B -[CALayer display] + 184
QuartzCore $00007FF81E492E9D CA::Layer::display_if_needed(CA::Transaction*) + 867
QuartzCore $00007FF81E62BA24 CA::Context::commit_transaction(CA::Transaction*, double, double*) + 758
QuartzCore $00007FF81E47401D CA::Transaction::commit() + 725
QuartzCore $00007FF81E490CEE CA::Transaction::release_thread(void*) + 206
libsystem_pthread.dylib $00007FF8159E526F _pthread_tsd_cleanup + 593
libsystem_pthread.dylib $00007FF8159E787B _pthread_exit + 71
libsystem_pthread.dylib $00007FF8159E4FDB pthread_exit + 42
icTrainer $000000010272F1A2 Classes.ThreadProc(Classes.TThread*) + 274
icTrainer $000000010261F587 ThreadWrapper(Pointer) + 55
libsystem_pthread.dylib $00007FF8159E7202 _pthread_start + 99
libsystem_pthread.dylib $00007FF8159E2BAB thread_start + 15Is this a known problem?
Best regards, Philipp -
The first example works fine with SDK 14.2 generated and tested on MacOS 12.6 and MacOS 14.2.
-
Ok, thanks. Than I was only unable to find it with my keywords.
But I'm still confused because it seems to be dependend on the SDK I'm using not the system the app is running on. I need to do more tests if the suggested fix is sufficient.
-
I found an older ticket for this here:
But the creator didn't create a ticket on EMBT side. So it's still unsolved there. And I don't understand until now if the dependency if because of the SDK I'm using only or also dependend on the MacOS-version the app is running on.
-
Is this only relevant for the SDK you are using or really for the MacOS-PC the app is running on.
As until now I haven't any problem compiling my app with MacOS SDK 13.3 and running my app an MacOS 14 but I got a problem as I switch to MacOS SDK 14.2.
So my assumption is that the following code is not correct{$IFDEF IOS} libCoreBluetooth = '/System/Library/Frameworks/CoreBluetooth.framework/CoreBluetooth'; {$ELSE} if (TOSVersion.MajorVersion>=14) then libCoreBluetooth = '/System/Library/Frameworks/CoreBluetooth.framework/CoreBluetooth' else libCoreBluetooth = '/System/Library/Frameworks/IOBluetooth.framework/Frameworks/CoreBluetooth.framework/CoreBluetooth'; {$ENDIF}
It needs to be something as
{$IFDEF IOS} libCoreBluetooth = '/System/Library/Frameworks/CoreBluetooth.framework/CoreBluetooth'; {$ELSE} {$IFDEF MACOS_SKD_14F} libCoreBluetooth = '/System/Library/Frameworks/CoreBluetooth.framework/CoreBluetooth'; {$ELSE} libCoreBluetooth = '/System/Library/Frameworks/IOBluetooth.framework/Frameworks/CoreBluetooth.framework/CoreBluetooth'; {$ENDIF} {$ENDIF}
-
Hi,
until now I run my project under MacOS SDK 13.3. Everything is fine with my BLE implementation. Now I try to switch to SDK 14.2. If I request for BluetoothLE1.DiscoverDevices my app crashs. I can reproduce this problem with the BLEScanner-example. What's necessary to use SDK 14.2 also? I've tried it with Delphi 12 (Patch 1) but I assume it's only depending on the MacOS SDK you use.
Best regards, Philipp -
I've found it: Project-Options, Versioninfo, UIDeviceFamily from iPhone to iPhone&iPad.
-
Hi,
I've started today to migrate from Delphi 11.3 to 12.0 but the App size on iOS is only the half of the display and if I check the values it's to small also:
Delphi 11.3:
self.clientWidth: 1180
self.clientHeight: 820
Delphi 12.0:
self.clientWidth: 667
self.clientHeight: 375Any idea for this?
-
Sorry, this was copy and paste from an example and it's only to demonstrate that there is an alternative approach.
I won't use inline variables in my projects normally.
-
Info: I was successful with the following code (using Indy now):
with TIdHTTP.Create(nil) do
try
var FIdSSLIOHandlerSocketOpenSSL:TIdSSLIOHandlerSocketOpenSSL:=TIdSSLIOHandlerSocketOpenSSL.Create(nil);
var Params: TIdMultiPartFormDataStream;
filename:=StringReplace(Training.filename, '.ictt', '.fit', [rfIgnoreCase]);
FIdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1_2;
FIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions := [sslvTLSv1_2];
IOHandler := FIdSSLIOHandlerSocketOpenSSL;
Request.ContentType := 'multipart/form-data';
Request.CustomHeaders.add('Authorization: Bearer ' + bearer);
Params := TIdMultiPartFormDataStream.Create;
try
params.AddFile('file', filename, GetMIMETypeFromFile(filename));
ResponseStr := Post('https://pushinglimits.club/api/oauth/upload_single_fit_file', Params);
finally
Params.Free;
end;
finally
Free;
end;- 1
-
The following curl-test works fine on my machine:
curl -X POST https://pushinglimits.club/api/oauth/upload_single_fit_file -H 'Content-Type: multipart/form-data' -H 'Authorization: Bearer ...' -F 'file=@Philipp_(SF6KICKR)_20231003_1941_Freies_Training_Training.fit'
But the corresponding Delphi-Code will return
10:29:08.213 16488-Info Response: 404 Not Found: <!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><title>Error</title></head><body><pre>Cannot POST /oauth/upload_single_fit_file</pre></body></html>What could be a difference between both calls?
I try to join the GenerateBoundary in System.Net.Mime but it's still not working.Http: TNetHTTPClient; formData: TMultipartFormData; headers: TNetHeaders; Http:=TNetHTTPClient.create(nil); Http.SecureProtocols := [THTTPSecureProtocol.TLS12]; formData:=TMultipartFormData.create(); headers:=TNetHeaders.create(); setLength(headers, 2); headers[0]:=TNameValuePair.create('Content-Type', 'multipart/form-data'); headers[1]:=TNameValuePair.create('Authorization', 'Bearer ' + bearer); formData.AddFile('file', filename); Http.Post('https://pushinglimits.club/api/oauth/upload_single_fit_file',formData,nil,headers);
-
This was my first test, but without any effect. Because of the overlay each information is rendered always again. One positive effect seems to reduce the internal image size of the icons from 224x224 to 56x56.
-
-
It seems to be a problem with TTMSFMXCalendarPicker but there is a fix for this yet on TMS-Software-Homepage (3.7.8.6).
How to initialize OpenSSL with MacOS 64 (x86 and ARM)?
in ICS - Internet Component Suite
Posted
Same effect with Version 8.68, so again I assume there is some additional piece of code necessary to initialize the MacOS-version of ICS but both of us don't know this part.