2009-08-16 3 views
0

に壊れますプロジェクトオーナーは現在リンゴに雇われており、おそらくもっと良いことがあります。奇妙彼らが働くと思ったが、私はトラブルの添付ファイルは、iPhoneデバイス上で動作するようになってを持っていますiPhone上のBase64エンコーディングは、シミュレータで動作しますが、私は、簡単なSMTPクライアントコードを使用して、最初にGoogleのコードに掲載されていますデバイス

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

:コードのフォークは、それはあなたがで見つけることができますgithubの、で、最近で維持され、ありますシミュレータ。私のgithubのコメントは、ここで見つけることができます:

http://github.com/kailoa/iphone-smtp/commit/50cbd49f351c2f0bb3a5ad6aea7736ac82d40af2#comment_27560コンテキストなど、すべてのそれと

...私の質問です:誰もが成功したファイル(好ましくは、オーディオファイルを添付することができましたが、どのファイルが対応致します今すぐ)、電子メールに、iPhone上でSMTPクライアントと一緒に送信?私は実際に直接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

それはそれは男hereを持っていた問題です、あなたの代わりに[imgData encodeBase64ForData]の[imgData encodeWrappedBase64ForData]を使用する必要があるかもしれません。

+0

アイデアをありがとう!私はそれを試して、それは問題を解決しなかったので、次の試み。 –

0

endiannessを確認しましたか?

コードは2つの異なるアーキテクチャで実行されています。一般的に、あなたがマシンを切り替えたときに、いくつかのことを変更することができます

  • を特定の種類の大きさ、言葉の中CGFloat秒またはポインタ
  • デフォルトのエンコーディングのバイト順(エンディアン)
  • のようなロケール機密データ
  • 保存優先データ
  • コード内に他の定義された定数。

おそらくさらにいくつか。

これをより詳細にデバッグするにはどうすればよいですか? 2つのアイデア:

  1. 本当にバグですか?それが意図したとおりにデバイス上で動作する場合は、シミュレータで "修正"するのには時間がかかりますか?
  2. もしそうなら、最初にエンコードされているバイトが異なっていることがわかります(diffが助けます)。そして、アクセスしている最下位レベルのコードにブレークポイントを設定します。私はあなたがこの機能にアクセスできると思っています。なぜなら、私はSDKでそれを知らないからです。両方のマシンでスタックトレースを取得したら、重要なフレームの重要な変数値を確認し、差異の発生場所を特定できます。
+0

ありがとう、私はあなたのデバッグ方法を試みます。そして、実際には、それはシミュレータで動作しますが、電話機は壊れます。私はあなたを混乱させるかどうかはわかりませんが、最終的には...はい、それは私にはこれを解決する価値があります、意図したデバイスで動作しないため、シミュレータ上で動作します... –

+0

そして本当にばかな質問を申し訳ありませんが、それが原因であれば、どうすればエンディアンの問題を修正/チェックできますか?私はPhotoshopの90年代後半以降、この種の問題に取り組んでいませんでした。 2つのbase64文字列を見て、15番目の文字に分岐します。エンディアンのようなものが問題であることは明らかです。各バイトに影響するもの。 –

関連する問題