2009-08-16 6 views
0

Я использую простой код клиента SMTP, первый размещен на Google Code по адресу:Base64 кодирование на iPhone, работает в тренажере, ломает на устройстве

http://code.google.com/p/skpsmtpmessage/

Это репо, кажется, пошли не сопровождается, как и владелец проекта теперь работает на яблоке, и, возможно, имеет лучшие дела. Существует форк кода, который в последнее время поддерживается на GitHub, которые вы можете найти по адресу:

http://github.com/kailoa/iphone-smtp/tree/master

У меня возникли проблемы с получением вложений работать на устройстве iPhone, думал странно они работают в тренажер. Мой GitHub комментарий можно найти здесь:

http://github.com/kailoa/iphone-smtp/commit/50cbd49f351c2f0bb3a5ad6aea7736ac82d40af2#comment_27560

Со всем, что в контексте ... мой вопрос: кто-нибудь был в состоянии успешно прикрепить файл (желательно аудиофайл, но любой файл будет делать для теперь) по электронной почте, отправленной с помощью SMTP-клиента на iPhone? Я действительно хочу иметь возможность прикреплять файлы к электронным письмам, которые я отправляю с помощью прямого SMTP-клиента, но до сих пор я еще не нашел какой-либо код, который правильно функционирует и работает, и я не смог успешно написать свой собственный код для выполнения сказал подвиг.

Есть ли причина, по которой файлы будут кодироваться по-разному на iPhone, чем в симуляторе? Потому что, когда я смотрю на исходную строку base64, которая создается в обоих контекстах, они разные. Я просто потерял, почему это так.

Соответствующая часть моего кода заключается в следующем:

NSString* emailBody = @"This is a test email body"; 

NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey, emailBody,kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil]; 

NSString *imgPath = [[NSBundle mainBundle] pathForResource:@"screenshot" ofType:@"png"]; 

NSData *imgData = [NSData dataWithContentsOfFile:imgPath]; 

NSDictionary *imgPart = [NSDictionary dictionaryWithObjectsAndKeys:@"image/png;\r\n\tx-unix-mode=0644;\r\n\tname=\"screenshot.png\"", kSKPSMTPPartContentTypeKey, @"attachment;\r\n\tfilename=\"screenshot.png\"", kSKPSMTPPartContentDispositionKey, [imgData encodeBase64ForData],kSKPSMTPPartMessageKey, @"base64",kSKPSMTPPartContentTransferEncodingKey,nil]; 

testMsg.parts = [NSArray arrayWithObjects:plainPart,imgPart,nil]; 

Если больше кода или ссылки необходимы, чтобы понять это, я рад продолжать добавлять. Но весь код легко доступен на github, поэтому любой, кто заинтересован в этом, может легко увидеть все.

Благодаря Райан

ответ

0

это может быть, что вам нужно использовать [imgData encodeWrappedBase64ForData] вместо [imgData encodeBase64ForData], что проблема парень here имел.

+0

Спасибо за идею! Я попробовал, и это не исправить проблему, так что следующая попытка. –

0

Вы заказывали endianness?

Код работает на двух разных архитектурах; в целом, при переключении машины, несколько вещей, которые можно было бы изменение:

  • размер некоторых типов, например CGFloat с или указателей
  • кодирования байт порядка по умолчанию в пределах слов (байтов)
  • locale- чувствительные данные
  • данные сохраненных данных
  • другие определенные константы в коде.

и, возможно, еще несколько.

Как отладить это более подробно? Две идеи:

  1. Действительно ли это ошибка?Если он работает на устройстве по назначению, стоит ли вам «исправить» симулятор?
  2. Если да, то вы можете найти первый байт, который кодируется по-разному (diff может помочь), и установить точку останова в коде нижнего уровня, к которому у вас есть доступ к которым задаются байты. Я предполагаю, что у вас есть доступ к этой функции, поскольку я не знаю об этом в SDK. После того, как у вас есть этот стек на обеих машинах, вы можете работать назад, проверяя значения ключевых переменных в значимых кадрах и определяя, где возникла разница.
+0

Спасибо, я попробую ваш метод отладки. И на самом деле, он работает в симуляторе, но ломается по телефону. Я не знаю, смутил ли я вас, но, в конце концов ... да, мне стоит это решить, потому что он не работает на устройстве, предназначенном, он работает на симуляторе, как предполагалось ... –

+0

И извините за действительно глупый вопрос, но как я могу исправить/проверить проблему с endian, если это вызывает его? Я не работал с такой проблемой с конца 90-х годов в Photoshop ... Я посмотрел на две строки base64, и они начали расходиться на 15-м символе. Понятно, что что-то вроде энтузиазма. Что-то, что влияет на каждый байт. –

Смежные вопросы