notas de estudo do xcode

Compartilhe no Instagram:

Encontrei um problema muito estranho. O jogo está na tela horizontal e eu uso o documentController para lidar com o compartilhamento. Haverá uma situação em que a postagem não terá teclado, o layout da história estará errado e os botões não poderão ser clicados.
Então tentei usar o método de comando de link externo e descobri que não há comando de upload direto de imagem disponível.
Depois que o link externo for aberto, a primeira foto do álbum será selecionada por padrão. Então aqui está a tentativa.

Tentei a abordagem UIKit

//UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), DocumentsPath);

Descobri que o salvamento foi bem-sucedido, mas o álbum de fotos não pode ser visto.

Tentei assíncrono

//                PHPhotoLibrary *library = [PHPhotoLibrary sharedPhotoLibrary];
//                [library performChanges:^
//                {
//                    [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:url];
//                }
//                completionHandler:^(BOOL success, NSError * _Nullable error) {
//                    if (success)
//                    {
//
//                        NSLog(@"保存成功");
//                    }
//                    else
//                    {
//                        NSLog(@"保存失败");
//                    }
//                }];

Encontrei o problema. A primeira chamada ficará travada por um tempo. Olhando o log, encontrei um aviso de openURL e ele não foi chamado no thread principal.
Portanto, o método síncrono é usado.

   NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];
    if([[UIApplication sharedApplication] canOpenURL:instagramURL]) //check for App is install or not
    {
        NSLog(@"------ %s", imgUrl);
        
        NSString* strImgUrl = [NSString stringWithUTF8String:imgUrl];
        NSString * docPath = @"Documents";
        NSString * finalPath = [docPath stringByAppendingPathComponent:strImgUrl];
        NSString * DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent: finalPath];
        
        NSLog(@"------ %@", DocumentsPath);
        
        NSURL* url = [NSURL URLWithString:DocumentsPath];
        NSError *error = nil;
          [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
                [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:url];
            } error:&error];
        
        if(error == nil)
        {
            NSString *str = [NSString stringWithFormat:@"instagram://library?AssetPath=%@", DocumentsPath];
            NSURL *instagramURL = [NSURL URLWithString:str];
            [[UIApplication sharedApplication] openURL:instagramURL];
            
            NSLog(@"保存成功");
        }
        else
        {
            NSLog(@"保存失败");
        }
    }
    else
    {
        NSLog(@"Instagram not found");
    }


Os testes de link estático xcode e link dinâmico estão bem. Ao enviar o testflight, um erro de ITMS-90205 ou ITMS-90206 é relatado, dizendo que UnityFramework contém estrutura.

Isso ocorre porque o pacote estático e o pacote dinâmico estão configurados incorretamente.
Após a nova versão dos pacotes unitários Xcode, haverá um subprojeto do UnityFramework.
Se o pacote dinâmico for colocado neste subprojeto e Embed&Sign for selecionado, então quando o pacote dinâmico finalmente gerar .app, o framework contendo UnityFramework aparecerá. Abaixo estão todos os Frameworks com Embed&Sign marcados.
No entanto, o próprio UnityFramework também é um pacote dinâmico, portanto, pacotes dinâmicos podem conter pacotes dinâmicos, o que não é permitido.

A solução é selecionar .framework no Unity, selecionar "Adicionar aos binários incorporados" no painel direito, para que ao gerar o Xcode, esses pacotes dinâmicos selecionados no Unity e UnityFramework estejam no mesmo nível do projeto principal.
Desde então, o upload foi bem-sucedido
(o principal motivo para esse problema é que o iOS SDK de terceiros foi conectado manualmente. Alguns plug-ins de pós-processamento do Unity não foram usados. O problema não é grande, então está resolvido .)


Xcode Object-c chama a função de unidade
UnitySendMessage([String 1 UTF8String], [String 2 UTF8String], [String 3 UTF8String]); todas as
strings são do tipo NSString*

A definição desta função é
void UnitySendMessage(const char* obj, const char* method, const char* msg);

O primeiro parâmetro é o nome do GameObject no Unity.
O segundo parâmetro é o nome da função.
O terceiro parâmetro é o parâmetro.

Portanto, primeiro deve haver um script MonoBehaviour pendurado em um GameObject. Apenas um parâmetro é fornecido na definição, portanto, se houver vários parâmetros, monte você mesmo uma string com delimitadores personalizados. Depois de inserir a unidade, string Just .split


O Unity chama a função Xcode object-c
usando System.Runtime.InteropServices;

[DllImport("__Internal")] private static extern void 函数名(参数);

Chame a função Xcode OC e retorne a string para a unidade

- (char*)GetDocumentPath
{
    NSString * docPath = @"Documents";
    NSString * strDocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent: docPath];   // 组装本地Url
    const char* cDocumentsPath = [strDocumentsPath UTF8String];
    
    char* result = (char*)malloc(strlen(cDocumentsPath) + 1);
    strcpy(result, cDocumentsPath);
    return result;
}

extern "C" char* iosGetDocumentPath()
{
    return [对象 GetDocumentPath];
}

O que é retornado é char* correspondente à string na unidade. Antes de retornar, você precisa abrir a memória para o valor de retorno char*, caso contrário, um erro será relatado.


A programação é infinita.
Todos são bem-vindos para se comunicar. Se houver algo incerto ou errado, você também pode conversar comigo em particular.
Meu QQ 334524067 God-like Didi

Acho que você gosta

Origin blog.csdn.net/qq_37776196/article/details/121406332
Recomendado
Clasificación